webservice

来源:互联网 发布:如何查看java字节码 编辑:程序博客网 时间:2024/05/09 13:00

在最近的项目中需要做一个webservice的客户端,为了方便,我使用cxf工具自动生成客户端。

1,首先,我从官网上下载了cxf的工具包。解压之后,从cmd进入cxf的bin目录,运行以下命令

            wsdl2java wsdl地址

结果报路径找不到,经过研究发现,是JDK版本问题,CXF生成工具需要JDK1.5的运行环境,而我的是JDK1.7。更换JDK版本后重新执行以上命令成功的生成了客户端代码。

2,将生成的代码放到工程下,结果发现super相关代码编译报错。开始以为是缺包,结果试着添加了很多的包也没能好使。

 JAVA代码如下:

  1. //This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2  
  2.    //API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1  
  3.    //compliant code instead.  
  4.    public IcpBusinessService(WebServiceFeature ... features) {   
  5.        super(WSDL_LOCATION, SERVICE, features);   
  6.    }   
  7.   
  8.    //This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2  
  9.    //API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1  
  10.    //compliant code instead.  
  11.    public IcpBusinessService(URL wsdlLocation, WebServiceFeature ... features) {   
  12.        super(wsdlLocation, SERVICE, features);   
  13.    }   
  14.   
  15.    //This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2  
  16.    //API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1  
  17.    //compliant code instead.  
  18.    public IcpBusinessService(URL wsdlLocation, QName serviceName, WebServiceFeature ... features) {   
  19.        super(wsdlLocation, serviceName, features);   
  20.     
 
 

最后发现,其不能正常编译通过是由于jax-ws2.2规约与java6冲突。但程序又不能仅以java5来编译,故需要降低jax-ws规约版本,可以这样处理:  执行命令

wsdl2java -frontend jaxws21 -client *.xml

 

    这样以jax-ws2.1生成的代码就可以在java6中编译通过并可执行。修改 *_Client.java,这个是测试的主方法,录入参数执行,即可调用远程服务.

 

 

 

    注:我将这两次生成的客户端代码进行比较,唯一的区别就是用后者生成的客户端代码将报错的3个构造函数移除了。也就是说,我们只需要将这3个出错的构造器删除就可以处理此异常。

在最近的项目中需要做一个webservice的客户端,为了方便,我使用cxf工具自动生成客户端。

1,首先,我从官网上下载了cxf的工具包。解压之后,从cmd进入cxf的bin目录,运行以下命令

            wsdl2java wsdl地址

结果报路径找不到,经过研究发现,是JDK版本问题,CXF生成工具需要JDK1.5的运行环境,而我的是JDK1.7。更换JDK版本后重新执行以上命令成功的生成了客户端代码。

2,将生成的代码放到工程下,结果发现super相关代码编译报错。开始以为是缺包,结果试着添加了很多的包也没能好使。

 JAVA代码如下:

  1. //This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2  
  2.    //API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1  
  3.    //compliant code instead.  
  4.    public IcpBusinessService(WebServiceFeature ... features) {   
  5.        super(WSDL_LOCATION, SERVICE, features);   
  6.    }   
  7.   
  8.    //This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2  
  9.    //API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1  
  10.    //compliant code instead.  
  11.    public IcpBusinessService(URL wsdlLocation, WebServiceFeature ... features) {   
  12.        super(wsdlLocation, SERVICE, features);   
  13.    }   
  14.   
  15.    //This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2  
  16.    //API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1  
  17.    //compliant code instead.  
  18.    public IcpBusinessService(URL wsdlLocation, QName serviceName, WebServiceFeature ... features) {   
  19.        super(wsdlLocation, serviceName, features);   
  20.     
 
 

最后发现,其不能正常编译通过是由于jax-ws2.2规约与java6冲突。但程序又不能仅以java5来编译,故需要降低jax-ws规约版本,可以这样处理:  执行命令

wsdl2java -frontend jaxws21 -client *.xml

 

    这样以jax-ws2.1生成的代码就可以在java6中编译通过并可执行。修改 *_Client.java,这个是测试的主方法,录入参数执行,即可调用远程服务.

 

 

 

    注:我将这两次生成的客户端代码进行比较,唯一的区别就是用后者生成的客户端代码将报错的3个构造函数移除了。也就是说,我们只需要将这3个出错的构造器删除就可以处理此异常。

原创粉丝点击