2012-12-12 83 views
11

我想使用jaxws maven插件为我的Web服务客户端生成源代码并获得以下异常;jaxws-maven-plugin 2.2 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 

这是我用来构建项目的POM;

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

我试图找到信息,但没有可用的东西。能否请你帮忙。

感谢

-

Sjunejo最近,我有同样的错误

+0

正如我试图从$ JAVA_HOME/bin中调用的wsimport生成从简单的Java类的源代码和它的作品像一个魅力的一些信息.... – SJunejo

回答

14


看来,这是因为的wsimport混乱与2.12.2版本JAXB的。

我可以通过编辑项目的pom.xml并添加<target>2.1</target>标签给每个导入的WSDL的配置,这样的正确生成Web服务来源:

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

希望它可以帮助谁有这个问题。

+0

3小时后的尝试,这是解决方案。以上都没有奏效。 – UltraMaster

+1

这也适用于我。就我而言,这是一台装有Java 7的机器,另一台装有Java 6的机器增加了混乱。 – Jim

+2

又帮助我了!唉,互联网现在是我的记忆。 – Jim

5

我假设你的问题是你正在Java 6上运行?由于Java 6包含JAX-WS的较早版本,因此如果要在Java 6上生成,编译和运行JAX-WS 2.2,则必须重写那些包含的API。正如Tex Killer上面提到的,您可以告诉wsimport生成JAX-WS 2.1对象和所有东西都应该可以正常工作(假设你有一个包含JAX-WS 2.1的Java 6 JRE,而不是2.0)。如果你特别希望产生2.2,不过,我可以通过我的POM设置为以下(只包括了为简洁的构建元素)要做到这一点:

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

有三个变化我认为你需要在你的POM中完成这项工作。我从这里得到的所有三个:http://jax-ws-commons.java.net/jaxws-maven-plugin/usage.html。首先,您可能需要像上面那样添加jaxws插件的其他依赖项。另外请注意,您将不得不取消对maven-compiler-plugin的注释,但似乎已正确设置了认可的目录。第三,你需要添加maven-dependency-plugin的定义。您可能需要修改JAXB和JAX-WS API版本以满足您的需求。

除了这些,我只好再更新了下< java主>与认可库推出的Maven通过将罐的JAXB和JAX-WS API(POM中定义相同的)的JRE/LIB /认可。最后,确保刚刚更新的JRE正在启动Maven构建。如果它仍然无法正常工作,请检查Maven构建的Eclipse运行配置,并确保它使用的是带有背书库的JRE。 (在我的情况下,运行配置使用的是与项目配置不同的JRE - 我更新了项目JRE,但没有运行配置使用的JRE,并且花了我大约一天的时间来弄清为什么它仍然不是加工)。

这应该为你做的伎俩。如果你想对它更精通一点,你可以更新运行配置,直接引用外部支持的库,以防你不想修改你的JRE安装。

欢呼

相关问题