我有以下一段非常标准的 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)