我是CXF的新手,正在尝试从WSDL创建一个客户端。我过去曾使用Metro和Axis。我下载了apache- cxf-2.3.3,并使用wsdl2java生成了客户端存根。我使用Maven并使用以下命令将其设置为pom:
<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?
实际上,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罐子添加到JDK的认可目录中
3)在Maven中配置编译器插件以“认可” 2.2个jar