2015-11-06 7 views
13

Se si utilizza un plugin come org.jvnet.jaxb2.maven2:maven-jaxb2-plugin per analizzare i file XSD, si incontra questa eccezione durante l'aggiornamento da jdk7 a jdk8:SAXParseException con jdk8 e Maven-jaxb2-plugin

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.

Come si fa a fare questo plugin funziona con jdk8?

+0

Hai visto [questo] (http: //stackoverflow.com/questions/23011547/webservice-client-generation-error-with-jdk8)? – Stefan

+0

@Stefan Assolutamente, ma quella domanda, sebbene abbia la stessa causa principale, non riguarda la generazione del codice con i plugin Maven. –

risposta

34

Questa domanda ha la stessa causa principale di this one. Ci sono due modi per risolvere questo problema:

Impostare la proprietà di sistema javax.xml.accessExternalSchema:

Se sei solo costruendo a livello locale, è possibile aggiungere questa riga in un file denominato jaxp.properties (se non esiste) in /path/to/jdk1.8.0/jre/lib:

javax.xml.accessExternalSchema=all 

questo non funzionerà se si potrebbe lavorare sul progetto con gli altri, specialmente se sono ancora usando jdk7. Si potrebbe semplicemente eseguire il vostro esperto di creare con la proprietà di sistema specificato nella riga di comando:

$mvn <target and options> -Djavax.xml.accessExternalSchema=all 

È anche possibile utilizzare un plugin per impostare la proprietà di sistema per voi:

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

È inoltre possibile configurare maven-jaxb2-plugin per impostare la proprietà:

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

Impostazione della versione di destinazione: Se non si desidera utilizzare le proprietà di sistema, è possibile impostare la maven-jaxb2-plugin di indirizzare versione 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> 
+0

Ciao Niel, Sto usando JRE1.8.0_111 e non riesco a trovare il file jaxp.properties. Qualche idea ? – Aguid

+0

Nessuna idea, scusa @AyadiAkrem –

+0

proprietà-maven-plugin funziona con la versione 1.6 di jaxb2-maven-plugin – richardhell