我心飞翔--cxf自动生成客户端super报错
2014-04-19 11:02
246 查看
在最近的项目中需要做一个webservice的客户端,为了方便,我使用cxf工具自动生成客户端。
1,首先,我从官网上下载了cxf的工具包。解压之后,从cmd进入cxf的bin目录,运行以下命令
wsdl2java wsdl地址
结果报路径找不到,经过研究发现,是JDK版本问题,CXF生成工具需要JDK1.5的运行环境,而我的是JDK1.7。更换JDK版本后重新执行以上命令成功的生成了客户端代码。
2,将生成的代码放到工程下,结果发现super相关代码编译报错。开始以为是缺包,结果试着添加了很多的包也没能好使。
JAVA代码如下:
//This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
//API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
//compliant code instead.
publicIcpBusinessService(WebServiceFeature ... features) {
super(WSDL_LOCATION, SERVICE, features);
}
//This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
//API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
//compliant code instead.
publicIcpBusinessService(URL wsdlLocation, WebServiceFeature ... features) {
super(wsdlLocation, SERVICE, features);
}
//This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
//API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
//compliant code instead.
publicIcpBusinessService(URL wsdlLocation, QName serviceName, WebServiceFeature ... features) {
super(wsdlLocation, serviceName, features);
}
最后发现,其不能正常编译通过是由于jax-ws2.2规约与java6冲突。但程序又不能仅以java5来编译,故需要降低jax-ws规约版本,可以这样处理: 执行命令
wsdl2java -frontend jaxws21 -client *.xml
或者
wsdl2java -frontend jaxws21 http://localhost:8080/cxfTest/services/WebServiceName?wsdl
或者
wsdl2java -client -frontend jaxws21 -d src http://localhost:8081/ href="http://localhost:8080/cxfTest/services/WebServiceName?wsdl" target=_blank>cxfTest/services/WebServiceName?wsdl
这样以jax-ws2.1生成的代码就可以在java6中编译通过并可执行。修改 *_Client.java,这个是测试的主方法,录入参数执行,即可调用远程服务.
注:我将这两次生成的客户端代码进行比较,唯一的区别就是用后者生成的客户端代码将报错的3个构造函数移除了。也就是说,我们只需要将这3个出错的构造器删除就可以处理此异常。
另外使用webservice的测试工具的时候,返回数据量大的时候会报错:System.Xml.XmlException: 根级别上的数据无效。 行 1,位置 1。
,这个时候利用java客户端直接调用程序是不会报错的。
1,首先,我从官网上下载了cxf的工具包。解压之后,从cmd进入cxf的bin目录,运行以下命令
wsdl2java wsdl地址
结果报路径找不到,经过研究发现,是JDK版本问题,CXF生成工具需要JDK1.5的运行环境,而我的是JDK1.7。更换JDK版本后重新执行以上命令成功的生成了客户端代码。
2,将生成的代码放到工程下,结果发现super相关代码编译报错。开始以为是缺包,结果试着添加了很多的包也没能好使。
JAVA代码如下:
//This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
//API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
//compliant code instead.
publicIcpBusinessService(WebServiceFeature ... features) {
super(WSDL_LOCATION, SERVICE, features);
}
//This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
//API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
//compliant code instead.
publicIcpBusinessService(URL wsdlLocation, WebServiceFeature ... features) {
super(wsdlLocation, SERVICE, features);
}
//This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
//API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
//compliant code instead.
publicIcpBusinessService(URL wsdlLocation, QName serviceName, WebServiceFeature ... features) {
super(wsdlLocation, serviceName, features);
}
最后发现,其不能正常编译通过是由于jax-ws2.2规约与java6冲突。但程序又不能仅以java5来编译,故需要降低jax-ws规约版本,可以这样处理: 执行命令
wsdl2java -frontend jaxws21 -client *.xml
或者
wsdl2java -frontend jaxws21 http://localhost:8080/cxfTest/services/WebServiceName?wsdl
或者
wsdl2java -client -frontend jaxws21 -d src http://localhost:8081/ href="http://localhost:8080/cxfTest/services/WebServiceName?wsdl" target=_blank>cxfTest/services/WebServiceName?wsdl
这样以jax-ws2.1生成的代码就可以在java6中编译通过并可执行。修改 *_Client.java,这个是测试的主方法,录入参数执行,即可调用远程服务.
注:我将这两次生成的客户端代码进行比较,唯一的区别就是用后者生成的客户端代码将报错的3个构造函数移除了。也就是说,我们只需要将这3个出错的构造器删除就可以处理此异常。
另外使用webservice的测试工具的时候,返回数据量大的时候会报错:System.Xml.XmlException: 根级别上的数据无效。 行 1,位置 1。
,这个时候利用java客户端直接调用程序是不会报错的。
相关文章推荐
- CXF自动生成客户端报错
- 使用CXF根据wsdl地址自动生成客户端 (java)
- webservice 服务端例子+客户端例子+CXF整合spring服务端测试+生成wsdl文件 +cxf客户端代码自动生成
- Cxf 自动生成客户端服务端代码
- CXF使用教程(二)——webService自动生成客户端代码
- cxf客户端代码自动生成
- CXF自动生成客户端
- 使用svcutil工具自动生成wcf调用的客户端代码和配置文件
- 关于cxf 连.net 的webservice生成客户端异常( undefined element declaration 's:schema')
- 使用wsdl自动生成客户端代码,调用方法时参数错误问题
- java wsdl反向生成源码,并使用CXF实现客户端调用代码
- cxf 生成客户端
- DataSnap服务器生成的ID自动更新到客户端
- CXF客户端代码生成与服务调用(二)
- CXF生成webservice动态客户端
- cxf生成webservice客户端
- cxf生成客户端代码
- CXF wsdl2java 生成java代码供客户端使用
- 根据命令行生成cxf客户端
- 利用Myeclipse自动生成webService客户端代码