首先我们要知道,wsimport是jdk自带的,可以根据wsdl文档生成客户端调用代码.当然,无论服务器端的WebService是用什么语言写的,都将在客户端生成Java代码。服务器端用什么写的并不重要。
其次就是了解wsimport的使用方法,其参数如下:
wsimport.exe位于JAVA_HOME\bin目录下.
常用参数为:
-d<目录> - 将生成.class文件。默认参数。
-s<目录> - 将生成.java文件。
-p<生成的新包名> -将生成的类,放于指定的包下,自定义包结构。
(wsdlurl) - http://server:port/service?wsdl,必须的参数。
示例:
C:/> wsimport –s . http://192.168.0.100/one?wsdl
C:/> wsimport –s . –pcom.sitech.web http://192.168.0.100/one?wsdl
注意:-s不能分开,-s后面有个小点,用于指定源代码生成的目录。点即当前目录。
如果使用了-s参数则会在目录下生成两份代码,一份为.class代码。一份为.java代码。
.class代码,可以经过打包以后使用。.java代码可以直接Copy到我们的项目中运行。
代码生成示例:(jdk生成代码不适用1.2,cxf生成时注意用 wsdl2java -autoNameResolution wsdl地址 来重命名)
2.使用jdk的方式去调用。
如Resources下的配置拦截文件,命名为:webServiceLogHandlers.xml,添加如下内容:
authHandler
com.ztesoft.jdkPackage.logPackage.SOAPLoggingHandler
3.2在生成文件的接口中引入webServiceLogHandlers.xml文件,进行接口拦截。
3.3拦截报文打印的实现(webServiceLogHandlers.xml中配置拦截的类实现)
4.httpClient的方式调用
4.1Eclipse中输入WebService请求报文
4.2报文的查看
4.3代码调用示例(注意DOM4J导包解析,也可以用DOM等方法解析)
5.cxf发布WebService
Spring MVC是通过DispatcherServlet来加载Spring配置文件的,因此不需要在web.xml中配置ContextLoaderListener。但是CXF却需要通过ContextLoaderListener来加载Spring。
这样就产生了一个矛盾,如果不配置ContextLoaderListener,CXF就无法正常使用。但如果配置ContextLoaderListener,又会造成Spring的重复加载(DispatcherServlet一次,ContextLoaderListener一次)
在网上查了一下资料,只看到一个国外的程序员提出不配置ContextLoaderListener,通过写一个CXFController,来替代默认的CXFServlet。但是这种HACK的方式总是不太好
通过ContextLoaderListener来加载cxf.xml配置文件的方式。
org.apache.cxf
cxf-rt-frontend-jaxws
3.0.3
org.apache.cxf
cxf-rt-transports-http
3.0.3
org.apache.cxf
cxf-rt-frontend-jaxrs
3.0.3
5.2接口编写
5.3实现编写
注意:
“@WebService”:标记表示该接口是一个WebService服务;“
@SOAPBinding(style=Style.RPC):表示遵循远程过程调用协议
@WebMethod”表示表示以下方法为WebService服务中的方法,exclude=true表示该方法不被发布出去.“
@WebParam(name="username")”表示方法中的参数,username属性限制了参数的名称,若没有指定该属性,参数将被重命名。
5.4配置application-cxf-server.xml文件
5.5通过web.xml文件加载application-cxf-server.xml,这种方式不用重写CXFServlet加载方式。
5.6打开浏览器输入:http://localhost/ws/userService?wsdl查看发布成功