一、如何将spring 的bean 变成 webservice
1.编写类, 声明一些关键字@WebService 和 @WebMethod
| package com.ulic.ults.systemmanage.webservice; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import com.ulic.ults.core.util.security.PasswordDigest; import com.ulic.ults.model.SysEmployee; import com.ulic.ults.systemmanage.service.SystemManageService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.context.support.SpringBeanAutowiringSupport; @WebService(serviceName="UserManageWebService") public class UserManageEndpoint extends SpringBeanAutowiringSupport{ public UserManageEndpoint() { } @Autowired private SystemManageService systemManageService; @WebMethod public SysEmployee login(SysEmployee user) { SysEmployee usr = systemManageService.getSysEmployeeByUsername(user.getName()); if(usr!=null){ PasswordDigest pd = new PasswordDigest(); if(user.getPwd()!=null && (pd.digest(user.getPwd())).equals(usr.getPwd())){ return usr ; }else{ return null; } }else{ return null ; } } @WebMethod public String getTip(String str){ return str; } } |
2.在application-context.xml, 增加spring对 webservice的支持
org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter
| <bean class="org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter"> <property name="baseAddress" value="http://localhost:9999/"/> </bean> |
3.将编写的类声明为spring管理的bean
| <bean id="userManageEndpoint" class="com.ulic.ults.systemmanage.webservice.UserManageEndpoint"/> |
4.通过访问地址http://localhost:9999/UserManageWebService?wsdl, 确认webservice是否配置正确
| <?xml version="1.0" encoding="UTF-8"?> <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --> <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --> -<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://webservice.systemmanage.ults.ulic.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://webservice.systemmanage.ults.ulic.com/" name="UserManageWebService"> -<types> -<xsd:schema> <xsd:importnamespace="http://webservice.systemmanage.ults.ulic.com/" schemaLocation="http://localhost:9999/UserManageWebService?xsd=1" /> </xsd:schema> </types> -<message name="login"> <partname="parameters" element="tns:login" /> </message> -<message name="loginResponse"> <partname="parameters" element="tns:loginResponse" /> </message> -<message name="getTip"> <partname="parameters" element="tns:getTip" /> </message> -<message name="getTipResponse"> <partname="parameters" element="tns:getTipResponse" /> </message> -<portType name="UserManageEndpoint"> -<operation name="login"> <inputmessage="tns:login" /> <outputmessage="tns:loginResponse" /> </operation> -<operation name="getTip"> <inputmessage="tns:getTip" /> <outputmessage="tns:getTipResponse" /> </operation> </portType> -<binding name="UserManageEndpointPortBinding" type="tns:UserManageEndpoint"> <soap:bindingtransport="http://schemas.xmlsoap.org/soap/http" style="document" /> -<operation name="login"> <soap:operationsoapAction="" /> -<input> <soap:bodyuse="literal" /> </input> -<output> <soap:bodyuse="literal" /> </output> </operation> -<operation name="getTip"> <soap:operationsoapAction="" /> -<input> <soap:bodyuse="literal" /> </input> -<output> <soap:bodyuse="literal" /> </output> </operation> </binding> -<service name="UserManageWebService"> -<port name="UserManageEndpointPort" binding="tns:UserManageEndpointPortBinding"> <soap:addresslocation="http://localhost:9999/UserManageWebService" /> </port> </service> </definitions> |
5.看见页面上显示如上面的信息,说明配置正确。
至此spring已经集成webservice完毕。
二、如何调用webservice
在jdk1.6环境中,有专用的命令wsimport 负责生成webservice客户端程序。
在服务开启的情况下,执行
wsimport -s <direcotry> http://localhost:9999/UserManageWebService?wsdl,
产生客户端程序,如下表。
2. 程序中 UserManageWebService和UserManageEndpoint是必须,其他可选。
UserManageWebService 是客户端入口程序。
UserManageEndpoint是webservice server端程序在本地的镜像接口文件。
3. 在Struts 的action 中直接引用UserManageWebService 即可调用webservice.
| public String login() throws Exception{ UserManageWebService umc = new UserManageWebService(); String tip = u.getUserManageEndpointPort().getTip("I do"); System.out.println(tip); return SUCCESS; } |
总结:
如何在客户端服务中将webservice引用配置到spring里,暂时未找到解决办法。
参考spring reference 中写法,测试没有通过,提示无法获得webservice。
| <bean id="accountWebService" class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean"> <property name="serviceInterface" value="example.RemoteAccountService"/> <property name="wsdlDocumentUrl" value="http://localhost:8080/account/services/accountService?WSDL"/> <property name="namespaceUri" value="http://localhost:8080/account/services/accountService"/> <property name="serviceName" value="AccountService"/> <property name="portName" value="AccountPort"/> </bean> |
使用xfire ,通过客户端程序虽然可以找到webservice,但是远端类的方法的参数无法正常传入,反馈总是空值(null).
本文介绍了如何在Spring中集成Webservice功能。首先,通过在类上添加@WebService和@WebMethod注解,然后在application-context.xml中配置SimpleJaxWsServiceExporter,将bean声明为spring管理,并验证wsdl来确保配置正确。接着,讲解了如何在JDK1.6环境下使用wsimport生成webservice客户端程序,并在Struts action中调用webservice。然而,文章提到在客户端服务中将webservice引用配置到spring的具体方法尚未找到解决方案,尝试的方法未成功。
4922

被折叠的 条评论
为什么被折叠?



