webservice学习之二实体类的传递 收藏.docx
- 文档编号:9959595
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:43
- 大小:33.53KB
webservice学习之二实体类的传递 收藏.docx
《webservice学习之二实体类的传递 收藏.docx》由会员分享,可在线阅读,更多相关《webservice学习之二实体类的传递 收藏.docx(43页珍藏版)》请在冰点文库上搜索。
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"> //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"> //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"/>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- webservice学习之二实体类的传递 收藏 webservice 学习 实体 传递