|
17 | 17 | import java.util.ArrayList; |
18 | 18 | import java.util.List; |
19 | 19 | import org.xml.sax.InputSource; |
| 20 | +import org.slf4j.Logger; |
| 21 | +import org.slf4j.LoggerFactory; |
20 | 22 |
|
21 | 23 | /** |
22 | 24 | * JAXP-based implementation. Not the prettiest code, but doesn't have any 3rd-party dependencies, |
23 | 25 | * only relies on what Java provides by itself. |
24 | 26 | */ |
25 | 27 | public class JaxpServiceResponseUnmarshaller implements ServiceResponseUnmarshaller { |
26 | 28 |
|
| 29 | + protected final Logger logger = LoggerFactory.getLogger(getClass()); |
27 | 30 | private DocumentBuilder documentBuilder; |
| 31 | + private static int ELEMENT_TYPE = 1; |
28 | 32 |
|
29 | 33 | @Override |
30 | 34 | public List<TestModule> parseTestList(String xml) { |
@@ -67,10 +71,16 @@ public TestSuiteResult parseTestSuiteResult(String xml) { |
67 | 71 | NodeList resultNodes = testNode.getChildNodes(); |
68 | 72 | String failureXml = null; |
69 | 73 | for (int j = 0; j < resultNodes.getLength(); j++) { |
70 | | - Element resultNode = (Element) resultNodes.item(j); |
71 | | - if ("fail".equals(resultNode.getAttribute("type"))) { |
72 | | - failureXml = toXml(resultNode); |
73 | | - break; |
| 74 | + // An XQuery test module may return additional nodes, such as text nodes, which should be |
| 75 | + // ignored unless they are element nodes. |
| 76 | + if (resultNodes.item(j).getNodeType() == ELEMENT_TYPE) { |
| 77 | + Element resultNode = (Element) resultNodes.item(j); |
| 78 | + if ("fail".equals(resultNode.getAttribute("type"))) { |
| 79 | + failureXml = toXml(resultNode); |
| 80 | + break; |
| 81 | + } |
| 82 | + } else { |
| 83 | + logger.debug("Ignoring Node Type [" + resultNodes.item(j).getNodeType() + "]"); |
74 | 84 | } |
75 | 85 | } |
76 | 86 | testSuiteResult.addTestResult(new TestResult(testName, testTime, failureXml)); |
|
0 commit comments