0

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

1 回答 1

0

升级到 Maven cobertura 插件 2.7 和 Junit 4.11 后问题消失了

于 2015-03-27T22:14:21.300 回答