当前位置: 首页 > 知识库问答 >
问题:

尝试使用xjc/ant编译xml模式时XMLEntityManager中的NullPointerException

宋岳
2023-03-14

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

Macbook: ant -f build-response.xml 
Buildfile: /Users/matt/workspace/resources/build-response.xml

compilexjc:
     [echo] Compiling the schema...
      [xjc] Compiling file:/Users/matt/workspace/schemas/response/partner_response.xsd and others

BUILD FAILED
/Users/matt/workspace/resources/build-response.xml:34: java.lang.NullPointerException
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.reset(XMLEntityManager.java:1550)
    at com.sun.org.apache.xerces.internal.parsers.BasicParserConfiguration.reset(BasicParserConfiguration.java:503)
    at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.reset(SchemaParsingConfig.java:541)
    at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:408)
    at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:491)
    at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaDOMParser.parse(SchemaDOMParser.java:510)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:1802)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:531)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:556)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:523)
    at com.sun.org.apache.xerces.internal.parsers.XMLGrammarPreparser.preparseGrammar(XMLGrammarPreparser.java:202)
    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.XJCTask._doXJC(XJCTask.java:358)
    at com.sun.tools.xjc.XJCTask.doXJC(XJCTask.java:307)
    at com.sun.tools.xjc.XJCTask.execute(XJCTask.java:247)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:435)
    at org.apache.tools.ant.Target.performTasks(Target.java:456)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
    at org.apache.tools.ant.Main.runBuild(Main.java:851)
    at org.apache.tools.ant.Main.startAnt(Main.java:235)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

Total time: 1 second
<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>
Implementation-Version: 1.0.5
Specification-Title: Java Architecture for XML Binding
Specification-Version: 1.0

共有1个答案

汪博艺
2023-03-14

解决方案是将jaxb升级到2.2.7版本。我无法在JAXB1.0中解决这个问题。

事实上,它比这更复杂,因为JAXB-RI2.2.7中有一个bug,我必须修补它。看这个问题和答案。

 类似资料:
  • 我有一个XSD的格式: 当使用XJC编译器在第1行“prolog中不允许内容”进行编译时,它给出了一个错误。如果我将编码更改为“ISO-8859-1” 它给出了以下错误: 如果我从XSD中删除“root”标记,它将开始出现以下错误: 未能分析架构。 我的问题是,我们是否可以使用XJC编译一个包含多个模式标记的XSD。我尝试了以下文件格式: 它对上面的工作非常好,适当地创建了类。 它与命名空间声明有

  • 如果你不知道怎么从 github 上下载 Nutz 的源代码,请看 从 Git 编译 一节 编译通常是个麻烦的问题,依赖关系啊,环境变量啊,等等,全是些没有技术含量的东 东,但是却能搞的你非常头疼。虽然编译 Nutz 是一个相对简单的工作 -- 它编译 的时候不需要依赖第三方 jar 包,但是还是有一些工作要做的。 从我个人的情况来看,我经常在如下三个环境下进行 Nutz 的开发: 公司 - Vi

  • 我使用的是从这里下载的官方XSD模式: http://docs.oasis-open.org/ubl/os-UBL-2.0.zip (路径:xsd/maindoc/UBL-Order-2.0.xsd) 当我使用下面的命令用XJC生成java类时,我总是在控制台上得到一个错误,我不知道如何处理。 命令: 错误: 我尝试的是不使用普通的XSD,而是使用trang.jar.生成我自己的XSD。结果很好,

  • 我现在已经为javac ant任务问题苦苦挣扎了很长时间。问题是ant显然忽略了设置为1.5的target属性: 目标和源设置为1.5。运行任务时出现编译错误: 根据java docs(link)方法,createStruct是在Java1.6中引入的,所以我知道ant是在编译到1.6而不是像我礼貌地要求的那样编译到1.5。 我已经尝试了所有我能在网上找到的,现在我放弃了。有人能帮帮我吗?非常请.

  • 问题内容: 我正在按照本教程讲解如何使用C\ C ++代码扩展Python。 名为“使用Microsoft Windows的GCC构建扩展模块”部分对我来说失败,并出现以下错误: 名为“使用Microsoft Visual C ++构建扩展模块”的部分也失败,并显示类似错误: 我应该怎么做才能解决这个问题? 问题答案: 您是否拥有python dev文件,以便可以找到Python.h? 您是否已将

  • 我是Java编程的新手,我正在自学。 在运行javac时遇到一些问题后,我再次检查了windows地址和类路径,并将它们设置为正确的目录路径。问题解决了,因为现在当我输入'javac-version'时,我得到的版本显示java comilier已经安装。因此,现在我正试图从命令提示符运行一个Helloworld程序,以便检查基本功能!(我没有使用Eclipse,因为我还没有准备好增加额外的复杂性