2013-01-10 14 views
6

Sto utilizzando la versione jaxws-maven-plugin2.1. Ho scoperto molto strano codice generato per la posizione WSDL da risorse jar:jaxws-maven-plugin che risolve la posizione WSDL relativa alla posizione della classe, perché?

   <configuration> 
        <keep>true</keep> 
        <sourceDestDir>${basedir}/src/main/java</sourceDestDir> 
        <extension>true</extension> 
        <wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory> 
        <packageName>my.package.gen</packageName> 
        <wsdlLocation>wsdl/*</wsdlLocation> 
        <wsdlFiles> 
         <wsdlFile>mywsdl.wsdl</wsdlFile>        
        </wsdlFiles> 
       </configuration> 

E il codice generato è:

static { 
    URL url = null; 
    try { 
     URL baseUrl; 
     baseUrl = my.package.gen.My_Service.class.getResource("."); 
     url = new URL(baseUrl, "wsdl/mywsdl.wsdl"); 
    } catch (MalformedURLException e) { 
     logger.warning("Failed to create URL for the wsdl Location: 'wsdl/mywsdl.wsdl', retrying as a local file"); 
     logger.warning(e.getMessage()); 
    } 
    MYSERVICE_WSDL_LOCATION = url; } 

Così il file WSDL viene cercato nella directory (pacchetto) il residenti di classe generati e non nella directory principale di jar, come sarebbe logico. E il WSDL non può essere trovato.

Si tratta di un bug in jaxws-maven-plugin o è l'errore nella mia configurazione?

+0

nel frattempo potreste trovare una soluzione per il problema? Sto affrontando lo stesso problema in cui tu e Samuels la soluzione è davvero un brutto scherzo. – Vadimo

+0

Ecco la stessa domanda con una soluzione alternativa. http://stackoverflow.com/questions/4163586/jax-ws-client-whats-the-correct-path-to-access-the-local-wsdl – Vadimo

risposta

2

Si dovrebbe usare jaxws-maven-plugin versione 2.3 invece di 2.1 e il risultato sarà come ci si aspettava .

L'uscita della versione 2.3 come questo (se la cartella WSDL è in src/main/risorse):

URL url = <Any>.class.getClassLoader().getResource("wsdl/anywsdl.wsdl"); 
+0

Hai detto che è stato risolto nella versione 2.3 di jaxws-maven-plugin? Ho controllato il Nexus della mia azienda e sfortunatamente la versione più alta è la 2.2 (non posso usare nulla se non artefatti da lì). Quindi dovrei suggerire loro di aggiornare la versione? Hai qualche link al problema con le informazioni, in quale versione è stato corretto? Ho bisogno di qualcosa per dimostrare che questo aggiornamento è necessario. –

+0

Sì, è vero. Ho modificato solo la versione nella mia build da 2.3 a 2.1 per vedere il risultato sarà lo stesso di @ Łukasz 웃 L ツ. E così è stato :-) Ho controllato anche il mio gradle build con wsimport task che ha usato jax-ws 2.1.4 ed era anche sbagliato, quindi ho aggiornato a jax-ws 2.2.8 e il problema è stato risolto anche lì. Quindi gli strumenti JAX-WS 2.2.8 funzionano anche come richiesto. –

+0

Darò queste informazioni alla mia azienda. Se aggiornano il plugin o risolvono il problema manualmente, dipende da loro :) –

1

Per la generazione di

url = new URL(baseUrl, "wsdl/mywsdl.wsdl"); 

Questo è il comportamento previsto, in base a questo,

http://jax-ws-commons.java.net/jaxws-maven-plugin/wsimport-mojo.html#wsdlLocation

Dipende da cosa si vuole fare.

Se quello che preoccupa è

My_Service.class.getResource ("");

Si può sbarazzarsi del punto (percorso relativo) con qualcosa di simile:

<plugin> 
     <groupId>com.google.code.maven-replacer-plugin</groupId> 
     <artifactId>replacer</artifactId> 
     <version>1.5.0</version> 
     <executions> 
      <execution> 
      <phase>process-sources</phase> 
      <goals> 
       <goal>replace</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <file>target/generated-sources/wsimport/lu/hitec/webservices/pssu/${wsdl.app}/${interface.name}_Service.java</file> 
      <replacements> 
      <replacement> 
       <token>_Service\.class\.getResource\("\."\)</token> 
       <value>_Service\.class\.getResource\(""\)</value> 
      </replacement> 
      </replacements> 
     </configuration> 
     </plugin> 
+2

Sì, una soluzione alternativa, che richiede l'utilizzo di una libreria esterna (plug-in). Spero che sia corretto nella versione 2.3 di jaxws-maven-plugin, come scrive Miklos Krivan, nel mio caso sarà difficile convincere la compagnia a usare la versione più recente del plugin jaxws, convincere che usare un nuovo plugin è praticamente impossibile. –

Problemi correlati