2012-12-12 4 views
11

J'essaie d'utiliser jaxws maven plugin pour générer la source pour mon client de service Web et obtenir l'exception suivante;jaxws-maven-plugin 2.2 Échec avec 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 

Voici mon POM que j'utilise pour construire le projet;

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

J'ai essayé de trouver des informations mais rien y est disponible. S'il te plait peux-tu aider.

Merci

-

Sjunejo

+0

Juste un peu plus d'informations que j'ai essayé de générer la source de la classe Java simple en appelant wsimport de $ JAVA_HOME/bin et il fonctionne comme un charme .... – SJunejo

Répondre

14

J'avais récemment la même erreur.
Il semble que cela se produit parce que wsimport salit avec 2.1 et 2.2 versions de JAXB.

j'ai pu générer correctement les sources des services Web en éditant le projet pom.xml et en ajoutant une étiquette <target>2.1</target> à la configuration de chaque wsdl importée, comme ceci:

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

Hope it helps quiconque est d'avoir ce problème.

+0

Après 3 heures d'essayer, ce était la solution. Aucune de ces réponses n'a fonctionné. – UltraMaster

+1

Cela a fonctionné pour moi aussi. Dans mon cas c'était une machine avec Java 7 et une autre avec Java 6 ajoutant à la confusion. – Jim

+2

Et m'a aidé encore! Hélas, Internet est maintenant ma mémoire. – Jim

5

D'après votre problème, je suppose que vous utilisez Java 6? Parce que Java 6 inclut une ancienne version de JAX-WS, vous devez remplacer ces API si vous voulez générer, compiler et exécuter JAX-WS 2.2 sur Java 6. Comme le mentionne Tex Killer ci-dessus, vous pouvez demander à wsimport de générer Les objets JAX-WS 2.1 et tout devraient fonctionner correctement (en supposant que vous ayez un Java 6 JRE qui inclut JAX-WS 2.1, et pas 2.0). Si vous voulez spécifiquement pour générer 2,2, cependant, j'ai pu le faire en réglant mon POM à ce qui suit (j'ai inclus juste le construire élément par souci de concision):

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

Il y a trois changements Je pense que vous devrez faire dans votre POM pour que cela fonctionne. Tous les trois j'ai obtenu d'ici: http://jax-ws-commons.java.net/jaxws-maven-plugin/usage.html. Tout d'abord, vous devrez peut-être ajouter les dépendances supplémentaires pour le plugin jaxws comme je l'ai ci-dessus. Notez également que vous devrez décommenter le maven-compiler-plugin, mais il semble que les répertoires approuvés soient correctement configurés. Troisièmement, vous devrez ajouter la définition du plugin maven-dependency. Vous devrez peut-être modifier les versions de l'API JAXB et JAX-WS en fonction de vos besoins.

En plus de cela, je devais alors mettre à jour le JRE qui a été lancé Maven avec les libs approuvés en plaçant les pots pour la JAXB et l'API JAX-WS (mêmes que ceux définis dans le POM) sous < java-home >/lib/endorsed. Enfin, assurez-vous que la version Maven est lancée par le JRE que vous venez de mettre à jour. Si cela ne fonctionne toujours pas, consultez la configuration d'exécution Eclipse pour votre build Maven et assurez-vous qu'il utilise le JRE avec les bibliothèques approuvées. (Dans mon cas, la configuration d'exécution utilisait un JRE différent de la configuration du projet - j'avais mis à jour le projet JRE mais pas celui utilisé par la configuration d'exécution, et il m'a fallu environ une journée pour comprendre pourquoi il ne fonctionnait toujours pas. travail).

Cela devrait faire l'affaire pour vous.Si vous voulez être un peu plus avertis à ce sujet, vous pouvez probablement mettre à jour la configuration d'exécution pour référencer directement une bibliothèque externe approuvée, au cas où vous ne voudriez pas modifier votre installation JRE.

acclamations

Questions connexes