您的位置:首页 > 其它

我心飞翔--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客户端直接调用程序是不会报错的。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: