我运行以下命令
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 Ticket 和 ESPER Error
答案 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)
希望有所帮助。