webservice学习之二实体类的传递 收藏.docx

上传人:b****7 文档编号:23951651 上传时间:2023-05-22 格式:DOCX 页数:43 大小:33.53KB
下载 相关 举报
webservice学习之二实体类的传递 收藏.docx_第1页
第1页 / 共43页
webservice学习之二实体类的传递 收藏.docx_第2页
第2页 / 共43页
webservice学习之二实体类的传递 收藏.docx_第3页
第3页 / 共43页
webservice学习之二实体类的传递 收藏.docx_第4页
第4页 / 共43页
webservice学习之二实体类的传递 收藏.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

webservice学习之二实体类的传递 收藏.docx

《webservice学习之二实体类的传递 收藏.docx》由会员分享,可在线阅读,更多相关《webservice学习之二实体类的传递 收藏.docx(43页珍藏版)》请在冰豆网上搜索。

webservice学习之二实体类的传递 收藏.docx

webservice学习之二实体类的传递收藏

webservice学习之二(实体类的传递)收藏

SOAP、WSDL、UDDI,这些名词相信只要了解过WebService的都不陌生,根据Apache的定义,Axis是一种W3CSOAP实现,国内有些介绍还特别注明了:

Axis并不完全是SOAP引擎,它还包括独立的SOAP服务器、嵌入Servlet引擎的服务器、支持WSDL并提供转化WSDL为Java类的工具、例子程序、TCP/IP数据包监视工具,等等。

Axis部署WebSerive有两种方式,最简单的是拷贝java源代码文件到web文件夹下把扩展名改为.jws直接调用,可参考这篇文章:

用Axis1.1forJava进行WebServices开发

(1)。

另一种方式是通过WSDD(WebServices描述文档)部署,可参考:

使用Axis发布简单的Web服务。

在我的应用中,使用的是后者,以便Axis进行自动序列化/反序列化处理。

实现一次SSO登陆验证,最少要传入用户名、密码。

为了达到这种目的,在客户端我们构造User对象(本文中User对象仅包含用户名和密码),并通过Axis自动序列化传递出去;到了SSO端,Axis自动反序列化之后还原成User对象;最后返回给客户端说明本次登陆的结果,返回的结果不仅仅包含例如“登陆成功”之类的简单信息,也许还有很多其他信息,看来创建一个叫做Respond的对象(本文中Respond对象仅包含登陆ID和结果描述)很有必要了,把Respond传回给客户端说明登陆结果。

暴露给客户端供登陆验证的服务类是AuthService。

该类代码简单表示如下:

publicclassAuthService{

/**

*验证用户名和密码

*@paramStringuserName用户名

*@paramStringpassWord密码

*@returnRespond登陆验证后返回

*/

publicRespondlogin(Useruser){

Stringname=user.getName();

Stringpassword=user.password();

//进行数据库验证

//..

//

Respondrespond=newRespond();

respond.setId("123");

respond.setDesc("登陆成功");

returnrespond;

}

}

User和Respond以及服务类都写好了。

通过命令行方式,我生成了server-config.wsdd,内容如下:

xmlversion="1.0"encoding="UTF-8"?

>

//xml.apache.org/axis/wsdd/"xmlns:

java="http:

//xml.apache.org/axis/wsdd/providers/java">

\workspace\SSO\web\WEB-INF\attachments"/>

org.apache.axis.handlers.JWSHandler">

org.apache.axis.handlers.JWSHandler">

org.apache.axis.transport.local.LocalResponder"/>

org.apache.axis.handlers.http.URLMapper"/>

org.apache.axis.handlers.SimpleAuthenticationHandler"/>

RPC">

sso.Respond"qname="ns:

resp"xmlns:

ns="urn:

BeanService"/>

sso.User"qname="ns:

user"xmlns:

ns="urn:

BeanService"/>

MSG">

http:

//xml.apache.org/axis/wsdd/

RPC">

org.apache.axis.handlers.http.HTTPAuthHandler"/>

list"value="org.apache.axis.transport.http.QSListHandler"/>

wsdl"value="org.apache.axis.transport.http.QSWSDLHandler"/>

method"value="org.apache.axis.transport.http.QSMethodHandler"/>

要说明的是,深究上述配置文件具体含义不是本文的目的,要对其具体了解,请参考Axis文档。

其中,只有下面的XML才是我们感兴趣的:

RPC">

sso.Respond"qname="ns:

resp"xmlns:

ns="urn:

BeanService"/>

sso.bo.User"qname="ns:

user"xmlns:

ns="urn:

BeanService"/>

注:

sso.Respond为要注册的类,全路径和类名

为了完成自动序列化/反序列化,我们使用“beanMapping”元素指定要进行处理的bean文件。

只有在WSDD中定义了这些,才能享受到Axis带来的自动序列化/反序列化优势。

客户端代码:

publicclassTestClient{

publicstaticvoidmain(String[]args){

try{

Stringendpoint="http:

//127.0.0.1:

8080/services/AuthService?

wsdl";

Serviceservice=newService();

Callcall=(Call)service.createCall();

QNameqn=newQName("urn:

BeanService","resp");

QNameqx=newQName("urn:

BeanService","user");

//注册bean

call.registerTypeMapping(Respond.class,qn,newBeanSerializerFactory(Respond.class,qn),newBeanDeserializerFactory(Respond.class,qn));

call.registerTypeMapping(User.class,qx,newBeanSerializerFactory(User.class,qx),newBeanDeserializerFactory(User.class,qx));

call.setTargetEndpointAddress(new.URL(endpoint));

call.setOperationName(newQName("http:

//soapinterop.org/","login"));

Useruser=newUser();

mul.setName("test");

mul.setPassword("test");

Respondrespond=(Reopond)call.invoke(newObject[]{user});

System.out.println("登陆,返回'"+respond.getDesc()+"'。

");

}catch(Exceptione){

e.printStackTrace();

}

}

}

正如我们期望的,打印出“登陆成功”。

通过上面的范例,我们发现,Axis的自动序列化/反序列化机制还是很方便的,除了bean以外,其他类型的对象也可以让Axis来完成,具体参考Axis文档,如果要传递的对象Axis未提供自动序列化/反序列化支持,请考虑人工实现,参考:

深度编程Axis序列化/反序列化器开发指南。

webservice学习之二(实体类的传递)收藏

SOAP、WSDL、UDDI,这些名词相信只要了解过WebService的都不陌生,根据Apache的定义,Axis是一种W3CSOAP实现,国内有些介绍还特别注明了:

Axis并不完全是SOAP引擎,它还包括独立的SOAP服务器、嵌入Servlet引擎的服务器、支持WSDL并提供转化WSDL为Java类的工具、例子程序、TCP/IP数据包监视工具,等等。

Axis部署WebSerive有两种方式,最简单的是拷贝java源代码文件到web文件夹下把扩展名改为.jws直接调用,可参考这篇文章:

用Axis1.1forJava进行WebServices开发

(1)。

另一种方式是通过WSDD(WebServices描述文档)部署,可参考:

使用Axis发布简单的Web服务。

在我的应用中,使用的是后者,以便Axis进行自动序列化/反序列化处理。

实现一次SSO登陆验证,最少要传入用户名、密码。

为了达到这种目的,在客户端我们构造User对象(本文中User对象仅包含用户名和密码),并通过Axis自动序列化传递出去;到了SSO端,Axis自动反序列化之后还原成User对象;最后返回给客户端说明本次登陆的结果,返回的结果不仅仅包含例如“登陆成功”之类的简单信息,也许还有很多其他信息,看来创建一个叫做Respond的对象(本文中Respond对象仅包含登陆ID和结果描述)很有必要了,把Respond传回给客户端说明登陆结果。

暴露给客户端供登陆验证的服务类是AuthService。

该类代码简单表示如下:

publicclassAuthService{

/**

*验证用户名和密码

*@paramStringuserName用户名

*@paramStringpassWord密码

*@returnRespond登陆验证后返回

*/

publicRespondlogin(Useruser){

Stringname=user.getName();

Stringpassword=user.password();

//进行数据库验证

//..

//

Respondrespond=newRespond();

respond.setId("123");

respond.setDesc("登陆成功");

returnrespond;

}

}

User和Respond以及服务类都写好了。

通过命令行方式,我生成了server-config.wsdd,内容如下:

xmlversion="1.0"encoding="UTF-8"?

>

//xml.apache.org/axis/wsdd/"xmlns:

java="http:

//xml.apache.org/axis/wsdd/providers/java">

\workspace\SSO\web\WEB-INF\attachments"/>

org.apache.axis.handlers.JWSHandler">

org.apache.axis.handlers.JWSHandler">

org.apache.axis.transport.local.LocalResponder"/>

org.apache.axis.handlers.http.URLMapper"/>

org.apache.axis.handlers.SimpleAuthenticationHandler"/>

RPC">

sso.Respond"qname="ns:

resp"xmlns:

ns="urn:

BeanService"/>

sso.User"qname="ns:

user"xmlns:

ns="urn:

BeanService"/>

MSG">

http:

//xml.apache.org/axis/wsdd/

RPC">

org.apache.axis.handlers.http.HTTPAuthHandler"/>

list"value="org.apache.axis.transport.http.QSListHandler"/>

wsdl"value="org.apache.axis.transport.http.QSWSDLHandler"/>

method"value="org.apache.axis.transport.http.QSMethodHandler"/>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1