`

web service开发时,wsdl2java 客户端代码的生成

 
阅读更多

在用到web service时,如果是调用自己开发的web service还好,可以有一个方法的接口或参数对象实体类什么的,但如果是调用第三方的服务,除了得到web service服务地址的wsdl文档外,没有任何实质性编码的东西,写原生调用太麻烦,这时就需要自己写一个方法的接口类。

这个,目前已经有比较成熟的工具,可以自动生成,下面作一下简单的介绍。

 

apache的wsdl2java工具,目前貌似CXF和axis各有一套,使用方式大同小异,但生成的代码会有所区别,这时说的是CXF提供的wsdl2java工具。

 

wsdl2java用法:

wsdl2java -p com -d src -all  aa.wsdl

-p  指定其wsdl的命名空间,也就是要生成代码的包名:

-d  指定要产生代码所在目录

-client 生成客户端测试web service的代码

-server 生成服务器启动web  service的代码

-impl 生成web service的实现代码

-ant  生成build.xml文件

-all 生成所有开始端点代码:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.

详细用法见:http://cwiki.apache.org/CXF20DOC/wsdl-to-java.html

 

 

一开始使用了CXF的这套工具,发现不是很方便,毕竟依赖CXF提供的工具jar包,个人不是很喜欢用。

后来发现JDK居然也自带了对web service生成java代码的功能,貌似1.6版本开始的,试用后发现效果十分不错,果断投入它的怀抱。下面作下简单的介绍,以备忘。

 

打开jdk下的bin目录 看下能否找到"wsimport.exe"这个文件

一般情况下都会有

如果没有则说明你的JDK不支持这个功能

然后在DOS窗口下输入wsimport 敲回车

如果提示错误的话 说明你的JDK环境变量还没有配好

一句话总结,如果你在dos窗口下输入wsimport正常,就可以

 

如果OK的话 输入以下命令就可以将wsdl文件生成java文件了

wsimport http://127.0.0.1/TicketMobile/services/Cococ?wsdl  -keep -p com.llg.ws2 -s g:/ws

 

参数说明

wsimport 这个是必须的 该工具的名称

http://127.0.0.1/TicketMobile/services/Cococ?wsdl  wsdl文件

-keep  是否生成源文件

-p com.llg.ws2  生成后的java包名

-s g:/ws    生成后放哪个目录

 

 

但是前几天,在对一个第三方提供的web service使用该工具生成java代码的时候,居然出错了,网上查找后终于找到原因。

 

使用cxf wsdl2java或javax wsimport工具的时候,可能会遇到关于生成的Response类文件名冲突的问题 

 

 

Console代码  

  1. WSDLToJava Error: Thrown by JAXB : A class/interface with the same name "***" is already in use. Use a class customization to resolve this conflict.  

 

目前可选择的方案: 

apache的wsdl2java工具,使用-autoNameResolution自动处理 

wsdl2java -autoNameResolution http://hello.joy2everyone.com/yourWebService?wsdl 

 

 

JDK自带的工具

wsimport -p com.test.client -keep http://hello.joy2everyone.com/yourWebService?wsdl -B-XautoNameResolution 

 

2.如果web service是己方开发的,可以修改代码,使用自定义bindings,详细可看sun webservice文档 

 

例如: 

 

 

Java代码  

  1. public interface ValidateCCService  
  2.     @WebMethod  
  3.     @WebResult(name = "response")  
  4.     public ValidateCCResponse validateCC(@WebParam(name = "request")ValidateCCRequest request);  

 

这个情况下定义的方法名,如果使用工具生成客户端代码,很可能存在Response冲突,因为定义的wsdl中会有一个关于接口方法的message 

 

<wsdl:message name="validateCCResponse"> 

</wsdl:message> 

 

方法名定义的message与接口定义返回的ValidateCCResponse,在工具生成客户端代码时就会产生命名冲突。 

 

但是通过更改接口方法名为: 

 

 

Java代码  

  1. public interface ValidateCCService  
  2.     @WebMethod  
  3.     @WebResult(name = "response")  
  4.     public ValidateCCResponse validate(@WebParam(name = "request")ValidateCCRequest request);  

 

即可解决该冲突, 

 

 

 

分享到:
评论

相关推荐

    WEB Service 客户端代码生成器(Axis)

    一般我们都是在命令行下用WSDL2Java工具生成WEB Service 客户端代码,繁琐的Java环境变量,以及命令行参数很容易出错,为了提高效率,我用Swing做了一个图形界面生成器,输入WSDL地址(可以是本地路径或远程地址)...

    CXF框架应用在Web项目中

    Ⅰ)调用CXF提供的wsdl2java工具,根据WSDL文档生成相应的Java代码(任何语言实现web service都要暴露WSDL文档); Ⅱ)找到wsdl2java所生成的类中一个继承了Service的类(该类的实例可当工厂使用); Ⅲ)调用...

    Java WebService 简单实例 - 服务器端TheService.rar

    Java WebService 简单实例 http://blog.csdn.net/kingmax54212008/article/details/49764401 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要的重复操作。 一、准备工作(以下为本实例...

    Java WebService 简单实例-客户端TheClient.rar

    Java WebService 简单实例 http://blog.csdn.net/kingmax54212008/article/details/49764401 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要的重复操作。 一、准备工作(以下为本实例...

    JAX-WS自学笔记

    2、创建Web Service 2.1 从java开始 2.1.1 运行wsgen 2.1.2 生成的WSDL和XSD 2.1.3 目录结构 2.2 从WSDL开始 2.2.1 运行wsimport 2.2.2 生成的java代码 2.3发布Web Service 2.3.1在应用程序中发布 ...

    WebService之JAX-WS自学笔记

    2、创建Web Service 2.1 从java开始 2.1.1 运行wsgen 2.1.2 生成的WSDL和XSD 2.1.3 目录结构 2.2 从WSDL开始 2.2.1 运行wsimport 2.2.2 生成的java代码 2.3发布Web Service 2.3.1在应用程序...

    myeclipse8.5使用axis2插件开发webservice服务并调用--操作步骤图解

    1、使用服务端类com.Hello.java,com.Other.java生成wsdl、aar文件【aar文件通过axis2插件的Axis2 service archiver生成】【wsdl文件通过axis2插件的Axis2 code generator中的"(服务端)代码生成wsdl"来生成】, ...

    wsdl-tsclient:从wsdl生成打字稿客户端

    npm i -g wsdl-tsclient用法您可以检查示例存储库使用CLI生成客户端wsdl-tsclient ./soap.wsdl -o ./generated wsdl-tsclient ./resources/**/*.wsdl -o ./generated使用glob Version: 1.0.1Syntax: wsdl-tsclient ...

    myeclipse8.5使用axis2插件开发webservice服务并调用

    1、使用服务端类com.Hello.java,com.Other.java生成wsdl、aar文件【aar文件通过axis2插件的Axis2 service archiver生成】【wsdl文件通过axis2插件的Axis2 code generator中的"(服务端)代码生成wsdl"来生成】, ...

    JAVA程序开发大全---上半部分

    14.4.2 使用WSDL生成客户端代码 253 14.4.3 创建Web Service客户端测试代码 255 14.5 本章小结 255 第15章 Java EE中EJB的开发 256 15.1 EJB概述 256 15.2 WebLogic服务器的安装与配置 257 15.2.1 WebLogic服务器的...

    javabiginteger源码-nano:一个轻量级的安卓网络服务客户端框架

    支持WSDL驱动开发,提供工具从WSDL自动生成强类型代理。 支持 SOAP 1.1/1.2 和基于 XML 的网络服务。 支持自动 SOAP/XML 到 Java 对象绑定,性能堪比 Android 原生 XML 解析器。 建立在流行和成熟的 Android 库上。 ...

    ws_soap_client_example:带有 WSDL 的 Web 服务 SOAP 示例 - 客户端

    ws_soap_client_example 带有 WSDL 的 Web 服务 SOAP 示例 - 客户端 通过IDE eclipse,生成了一个web service 代码的例子——client。 目标是通过eclipse 创建一个SOAP WS CLIENT。 用于使用 SOAP WS 服务器。

    java 面试题 总结

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...

    超级有影响力霸气的Java面试题大全文档

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法...

Global site tag (gtag.js) - Google Analytics