Si vous utilisez un plugin tel que org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
pour analyser vos fichiers xsd, vous rencontrez cette exception lors de la mise à niveau de jdk7 vers 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.
Comment faites-vous fonctionner ce plugin avec jdk8?
Cette question a la même cause fondamentale que celle-ci . Il y a deux façons de résoudre ce problème:
Définition de la propriété système javax.xml.accessExternalSchema:
Si vous construisez uniquement localement, vous pouvez ajouter cette ligne à un fichier nommé jaxp.properties (s'il n'existe pas) sous /path/to/jdk1.8.0/jre/lib:
javax.xml.accessExternalSchema=all
Cela ne fonctionnera pas si vous travaillez sur le projet avec d'autres, surtout s'ils utilisent encore jdk7. Vous pouvez simplement exécuter votre construction maven avec la propriété système spécifiée sur la ligne de commande:
$mvn <target and options> -Djavax.xml.accessExternalSchema=all
Vous pouvez également utiliser un plugin pour définir la propriété système pour vous:
<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>
Vous pouvez également configurer le maven-jaxb2-plugin
pour définir la propriété:
<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>
Définition de la version cible: Si vous ne souhaitez pas utiliser les propriétés système, vous pouvez configurer le maven-jaxb2-plugin
pour cibler la version 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>
Avec la version 2.4 du plugin:
<externalEntityProcessing>true</externalEntityProcessing>