private boolean parseResult(InputStream in, JUnitEETest test) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document; byte[] buffer = readInput(in); try { document = builder.parse(new ByteArrayInputStream(buffer)); } catch (SAXException e) { log("Invalid xml:\n " + new String(buffer), Project.MSG_ERR); throw new BuildException("Unable to parse test result (no valid xml)."); } Element root = document.getDocumentElement(); if (root.getAttributeNode("unfinished") != null) { log(String.valueOf(root.getAttributeNode("unfinished")), Project.MSG_DEBUG); return false; } root.normalize(); NodeList testcases = root.getElementsByTagName("testsuite"); Vector<JUnitEEResultFormatter> resultFormatters = createFormatters(test); for (int i = 0; i < testcases.getLength(); i++) { Node node = testcases.item(i); NamedNodeMap attributes = node.getAttributes(); String testClass = attributes.getNamedItem("name").getNodeValue(); String testPkg = attributes.getNamedItem("package").getNodeValue(); int errors = Integer.parseInt(attributes.getNamedItem("errors").getNodeValue()); int failures = Integer.parseInt(attributes.getNamedItem("failures").getNodeValue()); String testName; if (testPkg != null && testPkg.length() != 0) { testName = testPkg + "." + testClass; } else { testName = testClass; } for (JUnitEEResultFormatter formatter : resultFormatters) { log("Calling formatter " + formatter + " for node " + node, Project.MSG_DEBUG); formatter.format(node); formatter.flush(); } if (errors != 0) { if (test.getErrorproperty() != null) { getProject().setNewProperty(test.getErrorproperty(), "true"); } if (test.getHaltonerror() || test.getHaltonfailure()) { throw new BuildException("Test " + testName + " failed."); } } if (failures != 0) { if (test.getFailureproperty() != null) { getProject().setNewProperty(test.getFailureproperty(), "true"); } if (test.getHaltonfailure()) { throw new BuildException("Test " + testName + " failed."); } } } NodeList errorMessages = root.getElementsByTagName("errorMessage"); for (int i = 0; i < errorMessages.getLength(); i++) { Node message = errorMessages.item(i); log(message.getFirstChild().getNodeValue(), Project.MSG_ERR); } if (errorMessages.getLength() != 0) { throw new BuildException("Test execution failed."); } return true; }