在CXF wsdl2java中设置Java合规性级别

我是CXF的新手,我正在尝试从WSDL创建一个客户端。 我过去使用过Metro和Axis。 我下载了apache-cxf-2.3.3并使用wsdl2java生成客户端存根。 我使用Maven并用它来设置我的pom:

 2.3.3    org.apache.cxf cxf-rt-frontend-jaxws ${cxf.version}   org.apache.cxf cxf-rt-transports-http ${cxf.version}   org.apache.cxf cxf-rt-ws-security ${cxf.version}      true org.apache.maven.plugins maven-compiler-plugin  1.5 1.5 true true     

当我构建项目时,我得到以下错误:

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

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

有几个选择:

1)最简单的方法是在wsdl2java命令中添加“-fe jaxws21”,使其生成符合jaxws 2.1标准的代码,而不是2.2

2)将2.2 api jar添加到JDK的endorsed目录中

3)在maven中配置编译器插件以“认可”2.2jar

wsdl2java文档未提及指定Java版本的任何选项。

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

如果这不起作用,您可以通过更改pom中的源和目标行来配置Maven以使用Java 6,如下所示:

  1.6 1.6