Java 除了在Maven/Cobertura下,JAXB代码在任何地方都可以正常运行

Java 除了在Maven/Cobertura下,JAXB代码在任何地方都可以正常运行,java,maven,jaxb,cobertura,maven-cobertura-plugin,Java,Maven,Jaxb,Cobertura,Maven Cobertura Plugin,我有一段非常标准的JAXB代码 StringReader is = new StringReader(rspString); Unmarshaller ums = Util.createUnMarshaller(cL, Schemas.RECEIPT_SCHEMA, GetReceiptCallResponse.class); UnmarshallerHandler umsHandler = ums.getUnmarshallerHandler(); XMLFilte

我有一段非常标准的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 IDE中作为单元测试和IntelliJ覆盖工具运行时运行良好。看起来唯一的区别是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)

testFailingParseWithCobertura(org.vlad.taxestime.ReceiptImporterTest)时间:10.33秒升级到Maven cobertura插件2.7和Junit 4.11后,问题消失了

我从未在任何非琐碎的事情上成功使用过cobertura。如果您不关心覆盖率工具,请尝试JaCoCo。您的异常与模式验证有关。如果属性
count
不允许出现在元素
Receipts
中,则异常是否真实?如果是这样的话,其他环境可能已经抛出了异常,但是没有t@BlaiseDoughan,不,只有在代码在cobertura工具下运行时才会发生异常。当单元测试在没有覆盖的情况下运行时,它永远不会发生,而且在生产环境和IntelliJ IDE中也可以正常工作。事实上,在IntelliJ中,无论是否使用覆盖工具,它都可以工作。