webService的常见的调用和发布

1.使用wsimport.exe生成(也可以用cxf)源代码,通过jdk的方式去调用

            首先我们要知道,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的方式去调用。



3.webservice的报文拦截打印。

    3.1在项目中引入拦截配置文件。

          如Resources下的配置拦截文件,命名为:webServiceLogHandlers.xml,添加如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
	<handler-chain>
		<handler>
			<handler-name>authHandler</handler-name>
	         <handler-class>
com.ztesoft.jdkPackage.logPackage.SOAPLoggingHandler
</handler-class>
		</handler>
	</handler-chain>
</handler-chains>
   

    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配置文件的方式。


   5.1依赖的添加

<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>3.0.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http</artifactId>
			<version>3.0.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxrs</artifactId>
			<version>3.0.3</version>
		</dependency>
    5.2接口编写


     5.3实现编写


注意:

@WebService:标记表示该接口是一个WebService服务;“

@SOAPBinding(style=Style.RPC):表示遵循远程过程调用协议

@WebMethod”表示表示以下方法为WebService服务中的方法,exclude=true表示该方法不被发布出去.“

@WebParam(name="username")”表示方法中的参数,username属性限制了参数的名称,若没有指定该属性,参数将被重命名。


     5.4配置application-cxf-server.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
			http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
	<!-- 引入cxf相关的配置文件 -->
	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
	<!-- 创建服务类 -->
	<bean id="userServiceImpl" class="com.ztesoft.server.service.impl.UserServiceImpl" />
	<!-- 发布服务 serviceClass:服务接口全限定名 serviceBean:服务类对象,通过#号在spring容器找到对应id的对象 
		address:发布地址. -->
	<jaxws:server serviceClass="com.ztesoft.server.service.IUserService"
		serviceBean="#userServiceImpl" address="/userService">
	</jaxws:server>
</beans>
   

     5.5通过web.xml文件加载application-cxf-server.xml,这种方式不用重写CXFServlet加载方式。

    

       5.6打开浏览器输入:http://localhost/ws/userService?wsdl查看发布成功


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值