您的位置:首页 > 编程语言 > Java开发

Spring 集成 Webservice功能

2012-11-05 19:07 381 查看
一、如何将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).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: