2012-03-21 2 views
11

Sto utilizzando uno script maven per generare il codice Java che devo comunicare con un servizio WCF. Ho ottenuto il funzionamento della comunicazione e sono pronto ad integrare il mio script maven e il codice che genera, con il resto del codice java del progetto.Specifica del nome del pacchetto quando si utilizza Maven per generare Java da WSDL

Tuttavia, non riesco a convincere Maven a generare il codice con il nome del pacchetto corretto che desidero. Da quello che ho letto online dovrei usare il tag, e ho visto due possibili luoghi dove questo va. Ho incluso il segmento della sceneggiatura credo che questi debbano entrare, ed entrambi li. Tuttavia, questi tag influenzano nulla e il codice genera proprio come ha fatto senza di loro

 <plugin> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-codegen-plugin</artifactId> 
      <version>${cxf.version}</version> 
      <configuration> 
         <packageName>com.name.server.cxf</packageName>      
        <sourceRoot>src/com/server/cxf</sourceRoot> 
         <wsdlOptions> 
          <wsdlOption> 
           <wsdl>src/com/server/cxf/code-generation/service.xml</wsdl> 
           <bindingFiles> 
            <bindingFile>src/com/server/cxf/code-generation/javabindings.xml</bindingFile> 
           </bindingFiles> 
           <extraargs> 
            <extraarg>-validate</extraarg> 
            <extraarg>-client</extraarg> 
            <extraarg>-verbose</extraarg> 
            <extraarg>-xjc-verbose</extraarg> 
           </extraargs> 
          </wsdlOption> 
         </wsdlOptions> 
         <verbose /> 
        </configuration> 
      <executions> 
       <execution> 
        <id>generate-sources</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>wsdl2java</goal> 
        </goals> 
        <configuration> 
         <packageName>com.name.server.cxf</packageName>  
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Forse sto usando il tag sbagliato, o forse è nel posto sbagliato?

+1

Mai generare sorgente in src/... usa meglio il target/... – khmarbaise

risposta

18

Aggiungi <extraarg>-p</extraarg><extraarg>com.name.server.cxf</extraarg> alla sezione <extraargs> all'interno del tag <wsdlOption>. La seguente (versione leggermente diversa) funziona per me.

 <plugin> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-codegen-plugin</artifactId> 
      <version>${cxf.version}</version> 
      <executions> 
       <execution> 
        <id>generate-sources</id> 
        <phase>generate-sources</phase> 
        <configuration> 
         <wsdlOptions> 
          <wsdlOption> 
           <wsdl>src/com/server/cxf/code-generation/service.xml</wsdl> 
           <bindingFiles> 
            <bindingFile>src/com/server/cxf/code-generation/javabindings.xml</bindingFile> 
           </bindingFiles> 
           <extraargs> 
            <extraarg>-validate</extraarg> 
            <extraarg>-client</extraarg> 
            <extraarg>-verbose</extraarg> 
            <extraarg>-xjc-verbose</extraarg> 
            <extraarg>-p</extraarg> 
            <extraarg>com.name.server.cxf</extraarg> 
           </extraargs> 
          </wsdlOption> 
         </wsdlOptions> 
        </configuration> 
        <goals> 
         <goal>wsdl2java</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

In alternativa, creare un file service-options in src/com/server/cxf/code-generation/ con il contenuto -p com.name.server.cxf

+0

Sfortunatamente nessuno di questi sembra avere alcun effetto ... Per sicurezza, il file delle opzioni di servizio non ha bisogno di estensione? – crdzoba

+0

Sì, nessuna estensione. Credo che il formato sia -opzioni in cui hai serviceName.wsdl – aliasmrchips

+0

La prima volta che ho provato ho avuto il -p e il com.name.server.cxf racchiuso tra i tag sulla stessa linea ... Questo potrebbe essere stato quel problema . Ho ricevuto un errore quando l'ho fatto di nuovo, ma poi ho aggiunto -autoNameResolution sotto i due tag suggeriti e le cose sembrano funzionare ora! Grazie mille! – crdzoba

1

Questo funziona molto bene per me:

<wsdlOption> 
           <wsdl>src/main/resources/wsdl/my_wsdl.wsdl</wsdl> 
           <extraargs> 
            <extraarg>-p</extraarg> 
            <extraarg>http://services.demo.es/=com.my.package.demo1</extraarg> 
            <extraarg>-p</extraarg> 
            <extraarg>http://tempuri.org/=com.my.package.demo2</extraarg> 
            <extraarg>-exsh</extraarg> 
            <extraarg>true</extraarg> 
            <extraarg>-client</extraarg> 
            <extraarg>-wsdlLocation</extraarg> 
            <extraarg></extraarg> 
           </extraargs> 
          </wsdlOption> 
0

La soluzione di cui sopra con

<extraarg>-p</extraarg> 
<extraarg>com.name.server.cxf</extraarg> 

Sta cambiando il nome del pacchetto della sorgente generata sotto un singolo pacchetto, a causa del quale le classi ObjectFactory stanno diventando override. Ho bisogno di una struttura del pacchetto simile a quella basata su wsld. Insieme al pacchetto di addizione.

classi Java esempio vengono generate come com.service.name.mypackage.a, com.service.name.mypackage.b, com.service.name.mypackage.c