2011-04-13 38 views
9

我是CXF的全新用户,并且正在尝试从WSDL创建客户端。我过去曾使用Metro和Axis。我下载了apache-cxf-2.3.3并使用wsdl2java生成客户端存根。我使用Maven,并用此设置了我的POM:在CXF中设置Java遵从级别wsdl2java

<properties> 
    <cxf.version>2.3.3</cxf.version> 
</properties> 
<dependencies> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxws</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-transports-http</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-ws-security</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <inherited>true</inherited> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.5</source> 
       <target>1.5</target> 
       <optimize>true</optimize> 
       <debug>true</debug> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

当我生成项目,我得到这些错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project client-cxf: Compilation failure: Compilation failure: 
[ERROR] \Devel\Projects\Client-CXF\src\main\java\my\webservice\ServiceRuntimeException.java:[38,149] cannot find symbol 
[ERROR] symbol : method required() 

[ERROR] \Devel\Projects\Client-CXF\src\main\java\my\snmpv2\MyService.java:[76,8] cannot find symbol 
[ERROR] symbol : constructor Service(java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[]) 
[ERROR] location: class javax.xml.ws.Service 

看来,问题与生成的代码使用Java 6功能(XmlElementRef的“require”元素,Service的新构造函数)相关,而CXF Maven依赖项则用于Java 5.

有没有办法指定生成的代码应该与Java 5兼容?

回答

24

其实,代码CXF的WSDL2Java的命令行工具与Java 5兼容,但它可能与Java 6不兼容。原因是它生成的代码与JAX-WS 2.2和JAXB 2.2兼容。但是,Java 6中包含的这些API的版本仅为2.1。

有几个选项:

1)最简单的是 “-Fe jaxws21” 添加到WSDL2Java的命令把它生成JAXWS 2.1兼容的代码,而不是2.2

2)增加2.2 API罐子到你的JDK

3)的核准目录配置编译器插件在Maven来“代言”的2.2罐子

+0

感谢您澄清相容性并使用-fe选项。 http://cxf.apache.org/docs/wsdl-to-java.html上的描述没有很好的解释,并且可以指定使用哪个jax-ws版本。 – sdoca 2011-04-14 17:05:35

+0

非常好,现在适用于我。 – Dax 2012-10-04 11:34:01

0

wsdl2java documentation没有提及指定Java版本的任何选项。

你可以尝试使用Maven cxf-codegen-plugin来生成客户端存根,它应该遵守Maven编译器的源和目标版本。

如果不工作,你可以配置Maven通过更改源和目​​标线的聚甲醛,像这样使用Java 6:

   <source>1.6</source> 
       <target>1.6</target> 
+0

我没想到Glassfish的有一个版本的WSDL2Java的。我在生成Metro客户端时使用了wsimport。 Axis有一个wsdl2java,但我没有安装它。使用cxf-codegen插件创建相同的Java 6代码。 – sdoca 2011-04-13 21:46:56

+0

对不起,你是对的。它是Metro版本的'wsimport'。 – Powerlord 2011-04-13 22:01:06