Java 尝试使用xjc/ant编译xml模式时,XMLEntityManager中存在NullPointerException

Java 尝试使用xjc/ant编译xml模式时,XMLEntityManager中存在NullPointerException,java,xml,ant,jaxb,xjc,Java,Xml,Ant,Jaxb,Xjc,在尝试编译xml模式时,我看到了一个异常,似乎在某些sun类中 我以前编译过很多次这个模式,所以我不怀疑这个模式有问题。我认为我的java虚拟机可能发生了一些变化,可能是因为最新的升级。我毫不怀疑升级到JAXB2.0会解决这个问题,因为我已经尝试过了。然而,由于一个错误,我们必须坚持使用JAXB1.0 Macbook:ant-f build-response.xml Buildfile:/Users/matt/workspace/resources/build-response.xml 编译jc

在尝试编译xml模式时,我看到了一个异常,似乎在某些sun类中

我以前编译过很多次这个模式,所以我不怀疑这个模式有问题。我认为我的java虚拟机可能发生了一些变化,可能是因为最新的升级。我毫不怀疑升级到JAXB2.0会解决这个问题,因为我已经尝试过了。然而,由于一个错误,我们必须坚持使用JAXB1.0

Macbook:ant-f build-response.xml Buildfile:/Users/matt/workspace/resources/build-response.xml 编译jc: [echo]正在编译架构。。。 [xjc]编译文件:/Users/matt/workspace/schemas/response/partner_response.xsd和其他 构建失败 /Users/matt/workspace/resources/build response.xml:34:java.lang.NullPointerException 位于com.sun.org.apache.xerces.internal.impl.XMLEntityManager.reset(XMLEntityManager.java:1550) 位于com.sun.org.apache.xerces.internal.parsers.BasicParserConfiguration.reset(BasicParserConfiguration.java:503) 位于com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.reset(SchemaParsingConfig.java:541) 位于com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:408) 位于com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:491) 在com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaDOMParser.parse(SchemaDOMParser.java:510)上 位于com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:1802) 位于com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:531) 位于com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:556) 位于com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:523) 在com.sun.org.apache.xerces.internal.parsers.xmlgramarpreparser.preparseGrammar上(xmlgramarpreparser.java:202) 在com.sun.tools.xjc.reader.xmlschema.parser.SchemaConstraintChecker.check(SchemaConstraintChecker.java:78)上 位于com.sun.tools.xjc.GrammarLoader.loadXMLSchema(GrammarLoader.java:330) 位于com.sun.tools.xjc.GrammarLoader.load(GrammarLoader.java:127) 位于com.sun.tools.xjc.GrammarLoader.load(GrammarLoader.java:76) 在com.sun.tools.xjc.XJCTask._doXJC(XJCTask.java:358) 位于com.sun.tools.xjc.XJCTask.doXJC(XJCTask.java:307) 位于com.sun.tools.xjc.XJCTask.execute(XJCTask.java:247) 位于org.apache.tools.ant.UnknowneElement.execute(unknowneElement.java:292) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中 位于java.lang.reflect.Method.invoke(Method.java:597) 位于org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 位于org.apache.tools.ant.Task.perform(Task.java:348) 位于org.apache.tools.ant.Target.execute(Target.java:435) 位于org.apache.tools.ant.Target.performTasks(Target.java:456) 位于org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 位于org.apache.tools.ant.Project.executeTarget(Project.java:1364) 位于org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 位于org.apache.tools.ant.Project.executeTargets(Project.java:1248) 位于org.apache.tools.ant.Main.runBuild(Main.java:851) 位于org.apache.tools.ant.Main.startAnt(Main.java:235) 位于org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 位于org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 总时间:1秒 我的build-response.xml文件如下所示:

<project name="ERRequest" default="compilexjc" basedir=".">
 <target name="init">
  <tstamp/>
 </target>

<!-- Configure the context path for this application -->
<property name="appname" value="WPI" />
<property name="apppath" value="." />
<property name="path" value="${apppath}"/>

<property name="tmp" value="../tmp_response"/>

<!-- Configure properties to access the Manager application -->
<property file="build.properties"/>


<path id="classpath">
<fileset dir="${LIBS_JARPATH}" includes="*.jar" />
<fileset dir="${JAXB_LIB}" includes="*.jar" />
</path>

<!-- Configure the custom Ant tasks for the Manager application -->
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
  <classpath refid="classpath" />
</taskdef>


<!--compile Java source files-->
<target name="compilexjc" description="Generate Java source files from XSD">
  <mkdir dir="${tmp}"/>
 <echo message="Compiling the schema..." />
<xjc target="${tmp}" package="com.mycompany.binding.response"> <!--exception is thrown here-->
    <schema dir="../schemas">
        <include name="response/response.xsd"/>            
          <include name="response/partner_response.xsd"/>
      </schema>
      <produces dir="${tmp}" includes="**/*.java"/>
  </xjc>
  <copy todir="${tmp}">
    <fileset dir="${tmp}">
        <include name="**/*.properties"/>
    </fileset>
</copy>
</target>

XJC类位于类路径中的jaxb-XJC.jar中。以下是该jar的元信息: Implementation-Version: 1.0.5 Specification-Title: Java Architecture for XML Binding Specification-Version: 1.0 实施版本:1.0.5 规范标题:用于XML绑定的Java体系结构 规格版本:1.0
解决方案是将jaxb升级到2.2.7版。我无法在JAXB1.0中解析它


事实上,它比这更复杂,因为JAXB-RI2.2.7中有一个bug,我必须修补它。请参见第1550行的
XMLEntityManager.java
中的代码是什么?问题是我不知道XMLEntityManager来自哪个jar文件,也不知道哪个版本,因为xjc classesSo正在查找和调用它,所以您是否具有布尔属性?您能在XML中标记哪一行抛出空指针吗?异常是从JRE的一部分
com.sun.org.apache.xerces.internal.impl.XMLEntityManager
抛出的(您可以在
$JAVA\u HOME\lib\rt.jar
中找到它)@mdarwin您使用的确切JRE版本是什么?也许问题在较新的JRE中得到了解决-您尝试过吗?您还可以尝试将最新的Xerces版本添加到类路径中。 Implementation-Version: 1.0.5 Specification-Title: Java Architecture for XML Binding Specification-Version: 1.0