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

使用jdk8和maven-jaxb2-plugin的SAXParseException

归俊
2023-03-14

如果您使用类似org.jvnet.jaxb2.maven2:maven-jaxb2-plugin这样的插件来解析xsd文件,那么在从jdk7升级到JDK8时会遇到以下异常:

org.xml.sax.SAXParseException;systemID:file:/d:/work/my/schema.xsd;行号:27;列号:133;schema_reference:无法读取架构文档“CoreComponentStechnicalSpecification-1p0.xsd”,因为accessExternalSchema属性设置的限制不允许“file”访问。

您如何使这个插件与JDK8一起工作?

共有1个答案

彭鹭洋
2023-03-14

这个问题和这个问题有同样的根源。解决这个问题有两种方法:

设置javax.xml.AccessExternalSchema系统属性:

如果您只是在本地构建,那么可以将这一行添加到/path/to/jdk1.8.0/jre/lib下名为jaxp.properties的文件中(如果不存在):

javax.xml.accessExternalSchema=all
$mvn <target and options> -Djavax.xml.accessExternalSchema=all
<plugin>
    <!-- Needed to run the plugin xjc en Java 8 or superior -->
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-2</version>
    <executions>
        <execution>
            <id>set-additional-system-properties</id>
            <goals>
                <goal>set-system-properties</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <properties>
            <property>
                <name>javax.xml.accessExternalSchema</name>
                <value>all</value>
            </property>
            <property>
                <name>javax.xml.accessExternalDTD</name>
                <value>all</value>
            </property>
        </properties>
    </configuration>
</plugin>
<plugin>
   <groupId>org.jvnet.jax-ws-commons</groupId>
   <artifactId>jaxws-maven-plugin</artifactId>
   <version>2.3</version>
   <configuration>
     <!-- Needed with JAXP 1.5 -->
     <vmArgs>
         <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
     </vmArgs>
   </configuration>
</plugin>

设置目标版本:如果不想使用系统属性,可以将maven-jaxb2-plugin设置为目标版本2.0:

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>${maven.plugin.jaxb2.version}</version>
    <configuration>
        <args>
            <arg>-target</arg>
            <arg>2.0</arg>
        </args>
    </configuration>
</plugin>
 类似资料:
  • 我使用Maven3.3.3和maven-jaxb2-plugin Version0.12.1从XSD模式生成java类。XSD所在的地址返回HTTP 302,插件抛出: 是否可以指定xjc编译器遵循302到正确的链接,或者不去尝试下载XSD?

  • 我有多个xsd模式,我想将它们解组到同一文件夹下的不同包中。我尝试了这两个插件,两个插件似乎都能很好地处理这两种配置,但在maven-jaxb2-plugin的情况下,eclipse插件会无限期地生成类(因为=true),但是如果我没有指定forceRegenate,当我运行我的配置有任何问题吗? jaxb2 maven插件 maven-jaxb2-plugin 以及build helper ma

  • 问题内容: 我想将多个xsd模式解组到 同一 文件夹下的不同程序包中。我尝试了两个插件,并且似乎都可以在这两种配置下正常工作,但是在使用maven- jaxb2-plugin的情况下,eclipse插件会无限期地生成类(由于= true),但是如果我不指定forceRegenerate,它将不会生成运行时完全没有第二组和第三组类,我的配置是否有问题? jaxb2-maven-插件 maven-ja

  • 我对Jaxb和这个maven-jaxb2插件非常陌生 这是我的. xsd文件: 这是我的。xjb文件: 当它生成时,它给出的java类有点像: 但是我不想为用户和用户列表重复相同的代码,我可以通过注释或定义正则表达式来做什么。请建议一些方法。 我只是想知道这段代码要写什么 因此,当它创建用户类时,它会显示@xmlRootElement(name='user'),而其他类的@xmlRootEleme

  • 问题内容: 我在配置时无法从WSDL和都存在于同一标准目录中的多个XSD文件生成Java类的问题。 如何在内联XSD中使用jaxb2 maven插件?仅在答案正确地建议使用插件配置中的参数这一点上相关,而该问题确实与内联XSD有关,而我的XSD是外部的。 插件目标参数在此处列出。 我的插件配置是: 我正在用进行测试,但插件忽略了调试输出中看到的 问题答案: 通过检查传递给JAXB XJC的参数的M

  • 我有一个项目,它使用maven-assembly-plugin打包了几个(可执行的jar)程序集--基本上相同的代码,但针对不同的客户机使用了不同的数据集。 我需要在可执行jar中使用spring,由于spring中的文件命名,我需要使用maven-shade-plugin创建jar。这工作很好,我可以创建可执行的jar,但我不能确定如何将我的其他文件组装到这个新的shaded jar,因为sha