web-dev-qa-db-ja.com

jdk8およびmaven-jaxb2-pluginでのSAXParseException

org.jvnet.jaxb2.maven2:maven-jaxb2-pluginなどのプラグインを使用してxsdファイルを解析すると、jdk7からjdk8にアップグレードするときに次の例外が発生します。

org.xml.sax.SAXParseException; systemId: file:/D:/Work/my/schema.xsd; lineNumber: 27; columnNumber: 133; schema_reference: Failed to read schema document 'CoreComponentsTechnicalSpecification-1p0.xsd', because 'file' access is not allowed due to restriction set by the accessExternalSchema property.

このプラグインをjdk8でどのように機能させるのですか?

17
Niel de Wet

この質問の根本的な原因は これ と同じです。この問題を解決するには2つの方法があります。

javax.xml.accessExternalSchemaシステムプロパティの設定:

ローカルでのみビルドする場合は、この行を/path/to/jdk1.8.0/jre/libの下にあるjaxp.propertiesという名前のファイルに追加できます(存在しない場合)。

javax.xml.accessExternalSchema=all

他の人と一緒にプロジェクトで作業している可能性がある場合、特にjdk7をまだ使用している場合、これは機能しません。コマンドラインで指定されたシステムプロパティを使用して、Mavenビルドを実行できます。

$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>

maven-jaxb2-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>
43
Niel de Wet

プラグインの2.4バージョン:

<externalEntityProcessing>true</externalEntityProcessing>
0
Rob Tulloh