仅在Java中的XJC NullPointerException> 7u40

时间:2014-01-13 19:50:50

标签: java jaxb java-7 xjc

我运行以下命令

exec /usr/java/jdk1.7.0_45/bin/java -jar jaxb-xjc.jar TestPolicy.xsd

并抛出以下异常:

Exception in thread "main" java.lang.NullPointerException
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.setProperty(XMLDocumentFragmentScannerImpl.java:776)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.setProperty(XMLDocumentScannerImpl.java:448)
at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.setProperty(SchemaParsingConfig.java:492)
at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaDOMParser.setProperty(SchemaDOMParser.java:503)
at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reset(XSDHandler.java:3594)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.reset(XMLSchemaLoader.java:1068)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:561)
at com.sun.org.apache.xerces.internal.parsers.XMLGrammarPreparser.preparseGrammar(XMLGrammarPreparser.java:205)
at com.sun.tools.xjc.reader.xmlschema.parser.SchemaConstraintChecker.check(SchemaConstraintChecker.java:78)
at com.sun.tools.xjc.GrammarLoader.loadXMLSchema(GrammarLoader.java:330)
at com.sun.tools.xjc.GrammarLoader.load(GrammarLoader.java:127)
at com.sun.tools.xjc.GrammarLoader.load(GrammarLoader.java:76)
at com.sun.tools.xjc.Driver.run(Driver.java:181)
at com.sun.tools.xjc.Driver._main(Driver.java:80)
at com.sun.tools.xjc.Driver.access$000(Driver.java:46)
at com.sun.tools.xjc.Driver$1.run(Driver.java:60)

如果我使用jdk1.7.0_25运行相同的命令,我没有得到异常,一切都成功运行。

知道1.7更新25和1.7更新40或更新45版本之间有什么区别?

注意:我发现以下两个看似相似的链接。一个是openjdk的bug,但似乎没有在java sun网站上输入的bug。 OpenJDK Bug TicketESPER Error

2 个答案:

答案 0 :(得分:2)

我找到了一个对我来说“足够好”的解决方法,我需要jaxb1,因此无法替换xjc

来自GrammarLoader来源:

        if(opt.strictCheck && !SchemaConstraintChecker.check(opt.getGrammars(), errorReceiver, opt.entityResolver))

来自Options.java来源:

       if(args[i].equals("-nv"))
    {
        strictCheck = false;
        return 1;
    }

从命令行参数文档

    -nv                :  do not perform strict validation of the input schema(s)

=>使用

<xjc .../>
  <arg value="-nv" />
</xjc>

禁用导致NPE的SchemaConstraintChecker.check(...)

答案 1 :(得分:1)

解决方法:我有类似的问题(即提供NPE)但是从ant任务调用它。我没有使用单独的jaxb-xjc.jar(来自http://jaxb.java.net),而是决定使用JDK 1.7附带的xjc.exe(在bin下)并且像魅力一样工作。

在Windows中

%JAVA_HOME%/ bin / xjc.exe /?

如果由于某些原因,您必须使用该库,请确保您获得与jdk 1.7一起使用的最新版本(撰写本文时为2.2.7)

希望有所帮助。