如何用WSDL4J构建Spring+AXIS自动建立的Web service对应客户端

如何用WSDL4J构建Spring+AXIS自动建立的Web service对应客户端
个人另外一篇博文Spring集成AXIS2的Web service配置方法( http://dannyyuan.blog.51cto.com/212520/160504)提过到如何用Spring+AXIS自动完成WSDL的定义和对象拆装/封装,简单地把Spring声明的bean全部公开方法转换成Web service方法。
而Apache项目WSDL4J则是根据WSDL的XML文档就能够自动生成Web service的客户端代码,这样的话,构建web service服务端和客户端都显得没有多少手工编码了。其实WSDL4J也是能够生成服务端代码的,但是手工编写WSDL还不如用AXIS自动生成来得快。
用WSDL4J建立客户端代码的命令以下:
java -cp %AXIS_CLASSPATH% java org.apache.axis.wsdl.WSDL2Java -o DIR_NAME -p PACKAGE_NAME http://ws-server/proj-name/services/service-name?wsdl 其中AXIS_CLASSPATH应该包括axis.jar,commons-discovery.jar,commons-logging.jar,jaxrpc.jar,log4j.jar,saaj.jar,wsdl4j.jar,activation.jar,mail.jar。 该命令会在所指定目录下建立JAVA包,里面有[web_service]Locator.java, [web_service].java, [web_service]PortType.java, [web_service]SOAP11BindingStub.java,[web_service]SOAP12BindingStub.java,以及方法中全部涉及的参数bean等。 客户代码只需new [web_service]Locator实例,其实现了[web_service]接口,用get[web_service]SOAP11port_http(URL)方法取得方法实现对象[web_service]PortType实现,能够直接调用其方法像本地方法同样了。URL若是是HTTPS协议的,须要设SSL证书路径到系统属性配置中去(System.setProperty("javax.net.ssl.trustStore","ssl.cer");) 上面的都是简单的工具描述,但是若是不注意会出现一些意料不到的问题。 一、首先AXIS自动发布的WS方法参数会自动对应bean方法的参数名,结果在构建SOAP元素XML标签会映射过来,若是你用AOP想实现基本检验和类型检查之类的拦截的话,就要当心SOAP元素名与bean方法参数名的关系了; 二、其次WSDL2JAVA小工具好像不支持HTTPS(用户检验支持),这时能够用浏览器打开WSDL文档而后保存成文件被调用; 三、生成的JAVA代码会把URL写死(若是WSDL2JAVA工具用URL参数),因此默认建立PortType(不带参数)的方法会用到该URL; 四、若是Spring的ws 方法参数有通用类型如Object会致使序列化/反序列化去错,必须参数和返回类型保证为POJO对象或基本数据类型。 五、AXIS2有一些不一样之处,需注意AXIS2基于JDK6。
相关文章
相关标签/搜索