2012-12-12 8 views
11

Sto cercando di utilizzare jaxws Maven plugin per generare fonte per il mio cliente servizio web ed ottenere seguente eccezione;jaxws-maven-plugin 2.2 Failure con NoSuchMethodError()

[ERROR] Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.2:wsimport (default) on project cf-wsjavaclient: Error executing: wsimpor 
t [-keep, -s, C:\Users\sjunejo\Documents\GitHub\sandbox-ofsconnectorpoc\cf-wsjavaclient\target, -Xnocompile, http://localhost:9090/axis2/services/OFSC 
onnectorServiceWS?wsdl]: UndeclaredThrowableException: javax.xml.bind.annotation.XmlElementRef.required() -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.2:wsimport (default) on p 
roject cf-wsjavaclient: Error executing: wsimport [-keep, -s, C:\Users\sjunejo\Documents\GitHub\sandbox-ofsconnectorpoc\cf-wsjavaclient\target, -Xnoco 
mpile, http://localhost:9090/axis2/services/OFSConnectorServiceWS?wsdl] 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
     at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
     at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: org.apache.maven.plugin.MojoExecutionException: Error executing: wsimport [-keep, -s, C:\Users\sjunejo\Documents\GitHub\sandbox-ofsconnecto 
rpoc\cf-wsjavaclient\target, -Xnocompile, http://localhost:9090/axis2/services/OFSConnectorServiceWS?wsdl] 
     at org.jvnet.jax_ws_commons.jaxws.WsImportMojo.wsImport(WsImportMojo.java:360) 
     at org.jvnet.jax_ws_commons.jaxws.WsImportMojo.processWsdlViaUrls(WsImportMojo.java:342) 
     at org.jvnet.jax_ws_commons.jaxws.WsImportMojo.execute(WsImportMojo.java:283) 
     at org.jvnet.jax_ws_commons.jaxws.MainWsImportMojo.execute(MainWsImportMojo.java:30) 
     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
     ... 19 more 
Caused by: java.lang.reflect.UndeclaredThrowableException 
     at $Proxy44.required(Unknown Source) 
     at com.sun.tools.xjc.generator.bean.field.AbstractField.annotateReference(AbstractField.java:192) 
     at com.sun.tools.xjc.generator.bean.field.AbstractField.annotate(AbstractField.java:161) 
     at com.sun.tools.xjc.generator.bean.field.AbstractFieldWithVar.createField(AbstractFieldWithVar.java:80) 
     at com.sun.tools.xjc.generator.bean.field.SingleField.<init>(SingleField.java:94) 
     at com.sun.tools.xjc.generator.bean.field.SingleField.<init>(SingleField.java:81) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at com.sun.tools.xjc.generator.bean.field.GenericFieldRenderer.generate(GenericFieldRenderer.java:69) 
     at com.sun.tools.xjc.generator.bean.field.DefaultFieldRenderer.generate(DefaultFieldRenderer.java:82) 
     at com.sun.tools.xjc.generator.bean.BeanGenerator.generateFieldDecl(BeanGenerator.java:774) 
     at com.sun.tools.xjc.generator.bean.BeanGenerator.generateClassBody(BeanGenerator.java:555) 
     at com.sun.tools.xjc.generator.bean.BeanGenerator.<init>(BeanGenerator.java:258) 
     at com.sun.tools.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:166) 
     at com.sun.tools.xjc.model.Model.generateCode(Model.java:290) 
     at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:283) 
     at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:94) 
     at com.sun.tools.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:142) 
     at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2244) 
     at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:191) 
     at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:137) 
     at com.sun.tools.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:381) 
     at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:198) 
     at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:179) 
     at com.sun.tools.ws.WsImport.doMain(WsImport.java:74) 
     at org.jvnet.jax_ws_commons.jaxws.WsImportMojo.wsImport(WsImportMojo.java:357) 
     ... 24 more 
Caused by: java.lang.NoSuchMethodException: javax.xml.bind.annotation.XmlElementRef.required() 
     at java.lang.Class.getDeclaredMethod(Class.java:1937) 
     at com.sun.codemodel.TypedAnnotationWriter.invoke(TypedAnnotationWriter.java:112) 
     ... 52 more 

Ecco il mio POM che sto usando per costruire il progetto;

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.xxxxx</groupId> 
    <artifactId>cf-wsjavaclient</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>cf-wsjavaclient</name> 
    <properties> 
     <wsdlLoc>http://localhost:9090/axis2/services/OFSConnectorServiceWS?wsdl</wsdlLoc> 
     <skipTests>true</skipTests> 
    </properties> 
    <build> 
     <plugins> 
     <plugin> 
      <artifactId>maven-failsafe-plugin</artifactId> 
      <version>2.6</version> 
      <!-- Disable tests for now, until we have client jar built then we can run as follows; 
       To run the tests: 
       $ mvn verfiy -DskipTests=false 
      -->    
      <configuration> 
       <skipTests>${skipTests}</skipTests> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>integration-test</goal> 
         <goal>verify</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
      <plugin> 
       <groupId>org.jvnet.jax-ws-commons</groupId> 
       <artifactId>jaxws-maven-plugin</artifactId> 
       <version>2.2</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>wsimport</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <wsdlUrls> 
         <wsdlUrl>${wsdlLoc}</wsdlUrl> 
        </wsdlUrls> 
        <sourceDestDir>${basedir}/target</sourceDestDir> 
       </configuration> 
      </plugin> 
      <!-- Don't forget to use endorsed with JAX-WS 2.2 on Java 6 !! --> 
       <!-- plugin> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
        <compilerArguments> 
         <endorseddirs>${basedir}/endorsed</endorseddirs> 
         </compilerArguments> 
        </configuration> 
       </plugin--> 
     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>com.sun.xml.ws</groupId> 
      <artifactId>jaxws-rt</artifactId> 
      <version>2.2.6</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.xml.bind</groupId> 
      <artifactId>jaxb-api</artifactId> 
      <version>2.2.5</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.8.2</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
</project> 

Ho provato a trovare informazioni ma non c'è nulla disponibile. Potresti per favore aiutare.

Grazie

-

Sjunejo

+0

Proprio qualche informazione in più, come ho cercato di generare la fonte da classe Java semplice chiamando wsimport da $ JAVA_HOME/bin e funziona come un fascino .... – SJunejo

risposta

14

Stavo facendo lo stesso errore di recente.
Sembra che accade perché wsimport pasticci con 2.1 e 2.2 versioni di JAXB.

sono stato in grado di generare le fonti di servizi Web in modo corretto modificando il progetto di pom.xml e l'aggiunta di un tag <target>2.1</target> alla configurazione di ogni WSDL importati, in questo modo:

<execution> 
    <goals> 
     <goal>wsimport</goal> 
    </goals> 
    <configuration> 
     <wsdlFiles> 
      <wsdlFile>path/to/file.wsdl</wsdlFile> 
     </wsdlFiles> 
     <wsdlLocation>http://path/to/webservice?wsdl</wsdlLocation> 
     <staleFile>path/to/file.stale</staleFile> 
     <target>2.1</target> 
    </configuration> 
    <id>wsimport-generate-WebServiceName</id> 
    <phase>generate-sources</phase> 
</execution> 

Speranza che aiuta chiunque sta avendo questo problema.

+0

dopo 3 ore di tentativi, questo era la soluzione. Nessuno dei precedenti ha funzionato. – UltraMaster

+1

Questo ha funzionato anche per me. Nel mio caso era una macchina con Java 7 e un'altra con Java 6 che aggiungeva confusione. – Jim

+2

E mi ha aiutato di nuovo! Ahimè, internet è ora la mia memoria. – Jim

5

presumo, sulla base di problema che si esegue su Java 6? Poiché Java 6 include una versione precedente di JAX-WS, devi eseguire l'override di quelle API incluse se vuoi generare, compilare ed eseguire JAX-WS 2.2 su Java 6. Come menzionato in precedenza da Tex Killer, puoi semplicemente dire a wsimport di generare Gli oggetti JAX-WS 2.1 e tutto dovrebbe funzionare correttamente (supponendo che tu abbia uno dei Java 6 JRE che includeva JAX-WS 2.1 e non 2.0). Se si desidera generare specificamente per 2.2, però, sono stato in grado di fare questo impostando il mio POM al seguente (ho incluso solo il elemento accumulo per brevità):

<build> 
    <plugins> 
     <!-- Generate client using WSDL --> 
     <plugin> 
      <groupId>org.jvnet.jax-ws-commons</groupId> 
      <artifactId>jaxws-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>wsimport</goal> 
        </goals> 
        <configuration> 
         <target>2.2</target> 
         <verbose>true</verbose> 
         <wsdlUrls> 
          <wsdlUrl>http://localhost:8080/axis2/services/HelloWorld?wsdl</wsdlUrl> 
         </wsdlUrls> 
         <packageName>my.package.name</packageName> 
        </configuration> 
       </execution> 
      </executions> 


      <!-- if you want to use a specific version of JAX-WS, you can do so like 
       this --> 
      <dependencies> 
       <dependency> 
        <groupId>com.sun.xml.ws</groupId> 
        <artifactId>jaxws-tools</artifactId> 
        <version>2.2.7</version> 
        <exclusions> 
         <exclusion> 
          <groupId>org.jvnet.staxex</groupId> 
          <artifactId>stax-ex</artifactId> 
         </exclusion> 
        </exclusions> 
       </dependency> 
       <dependency> 
        <groupId>org.jvnet.staxex</groupId> 
        <artifactId>stax-ex</artifactId> 
        <version>1.7</version> 
        <exclusions> 
         <exclusion> 
          <groupId>javax.xml.stream</groupId> 
          <artifactId>stax-api</artifactId> 
         </exclusion> 
        </exclusions> 
       </dependency> 
      </dependencies> 
     </plugin> 

     <!-- Don't forget to use endorsed with JAX-WS 2.2 on Java 6 !! --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.3</version> 
      <executions> 
       <execution> 
        <phase>validate</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${project.build.directory}/endorsed</outputDirectory> 
         <silent>true</silent> 
         <artifactItems> 
          <artifactItem> 
           <groupId>javax.xml.bind</groupId> 
           <artifactId>jaxb-api</artifactId> 
           <version>2.2.4</version> 
           <type>jar</type> 
          </artifactItem> 
          <artifactItem> 
           <groupId>javax.xml.ws</groupId> 
           <artifactId>jaxws-api</artifactId> 
           <version>2.2.8</version> 
           <type>jar</type> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <compilerArguments> 
        <endorseddirs>${project.build.directory}/endorsed</endorseddirs> 
       </compilerArguments> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

ci sono tre cambiamenti Penso che dovrai fare in POM per farlo funzionare. Tutti e tre ho avuto da qui: http://jax-ws-commons.java.net/jaxws-maven-plugin/usage.html. In primo luogo, potrebbe essere necessario aggiungere le dipendenze aggiuntive per il plugin jaxws come sopra. Si noti inoltre che è necessario rimuovere il commento dal plug-in maven-compiler, ma sembra che le directory approvate siano state configurate correttamente. Terzo, dovrai aggiungere la definizione per il plugin maven-dependency-plugin. Potrebbe essere necessario modificare le versioni dell'API JAXB e JAX-WS in base alle proprie esigenze.

In aggiunta a questi, poi ho dovuto aggiornare il JRE che è stato lanciato Maven con le librerie approvati mettendo i vasi per la JAXB e JAX-WS API (quelle stesse definite nel POM) in < java-casa >/lib/approvato. Infine, assicurati che la build di Maven sia lanciata dal JRE che hai appena aggiornato. Se ancora non funziona, controlla la configurazione di esecuzione di Eclipse per la build di Maven e assicurati che stia usando JRE con le librerie approvate. (Nel mio caso la configurazione di esecuzione utilizzava un JRE diverso rispetto alla configurazione del progetto: avevo aggiornato il progetto JRE ma non quello utilizzato dalla configurazione di esecuzione e mi ci è voluto un giorno per capire perché non era ancora lavoro).

Questo dovrebbe fare il trucco per voi.Se si desidera essere un po 'più esperti su questo argomento, è possibile aggiornare la configurazione di esecuzione per fare riferimento direttamente a librerie esterne approvate, nel caso in cui non si desideri modificare l'installazione di JRE.

applausi