Подтвердить что ты не робот

SAXParseException с jdk8 и maven-jaxb2-plugin

Если вы используете плагин типа 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?

4b9b3361

Ответ 1

Этот вопрос имеет ту же самую причину, что и этот. Существует два способа решить эту проблему:

Установка свойства системы javax.xml.accessExternalSchema:

Если вы только создаете локально, вы можете добавить эту строку в файл с именем jaxp.properties(если он не существует) в /path/to/jdk 1.8.0/jre/lib:

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>

Ответ 2

С версией 2.4 плагина:

<externalEntityProcessing>true</externalEntityProcessing>