Spring 集成 Webservice功能

本文介绍了如何在Spring中集成Webservice功能。首先,通过在类上添加@WebService和@WebMethod注解,然后在application-context.xml中配置SimpleJaxWsServiceExporter,将bean声明为spring管理,并验证wsdl来确保配置正确。接着,讲解了如何在JDK1.6环境下使用wsimport生成webservice客户端程序,并在Struts action中调用webservice。然而,文章提到在客户端服务中将webservice引用配置到spring的具体方法尚未找到解决方案,尝试的方法未成功。

一、如何将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.  程序中 UserManageWebServiceUserManageEndpoint是必须,其他可选。

UserManageWebService 是客户端入口程序。

UserManageEndpointwebservice 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).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值