我有一段非常标准的JAXB代码
StringReader is = new StringReader(rspString);
Unmarshaller ums = Util.createUnMarshaller(cL, Schemas.RECEIPT_SCHEMA, GetReceiptCallResponse.class);
UnmarshallerHandler umsHandler = ums.getUnmarshallerHandler();
XMLFilter filter = Util.createSaxNamespaceFilter();
filter.setContentHandler(umsHandler);
InputSource xml = new InputSource(is);
filter.parse(xml);
在生产中运行良好,并作为单元测试的一部分。然而,当它由Maven / Cobertura插件运行时失败。奇怪的是,当代码由maven surefire插件运行时(没有覆盖测量),代码运行正常。此外,当它作为单元测试运行并在IntelliJ覆盖工具下运行时,它可以从IntelliJ IDE运行良好。似乎唯一的区别是cobertura工具本身。
我在输入中检查了架构和XML文件,一切看起来都没问题。当使用或不使用cobertura运行时,代码获得完全相同的输入。
我得到的具体错误是:
testFailingParseWithCobertura(org.vlad.taxestime.ReceiptImporterTest) Time elapsed: 10.33 sec <<< ERROR!
org.xml.sax.SAXParseException: cvc-complex-type.3.2.2: Attribute 'count' is not allowed to appear in element 'Receipts'.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:458)
答案 0 :(得分:0)
升级到Maven cobertura插件2.7和Junit 4.11后,问题就消失了