1、webservice学习之二实体类的传递 收藏webservice学习之二(实体类的传递) 收藏 SOAP、WSDL、UDDI,这些名词相信只要了解过 Web Service 的都不陌生,根据 Apache 的定义,Axis 是一种 W3C SOAP 实现,国内有些介绍还特别注明了:Axis 并不完全是 SOAP 引擎,它还包括独立的 SOAP 服务器、嵌入 Servlet 引擎的服务器、支持 WSDL 并提供转化 WSDL 为 Java 类的工具、例子程序、TCP/IP 数据包监视工具,等等。Axis 部署 Web Serive 有两种方式,最简单的是拷贝 java 源代码文件到 web 文
2、件夹下把扩展名改为 .jws 直接调用,可参考这篇文章:用Axis 1.1 for Java进行Web Services开发(1)。另一种方式是通过 WSDD(Web Services描述文档)部署,可参考:使用Axis发布简单的Web服务。在我的应用中,使用的是后者,以便 Axis 进行自动序列化/反序列化处理。 实现一次 SSO 登陆验证,最少要传入用户名、密码。为了达到这种目的,在客户端我们构造 User 对象(本文中 User 对象仅包含用户名和密码),并通过 Axis 自动序列化传递出去;到了 SSO 端,Axis 自动反序列化之后还原成 User 对象;最后返回给客户端说明本次登陆
3、的结果,返回的结果不仅仅包含例如“登陆成功”之类的简单信息,也许还有很多其他信息,看来创建一个叫做 Respond 的对象(本文中 Respond 对象仅包含登陆 ID 和结果描述)很有必要了,把 Respond 传回给客户端说明登陆结果。 暴露给客户端供登陆验证的服务类是 AuthService。该类代码简单表示如下:public class AuthService /* * 验证用户名和密码 * param String userName 用户名 * param String passWord 密码 * return Respond 登陆验证后返回 */ public Respond lo
4、gin(User user) String name = user.getName(); String password = user.password(); /进行数据库验证 /. / Respond respond = new Respond(); respond.setId(123); respond.setDesc(登陆成功); return respond; User 和 Respond 以及服务类都写好了。通过命令行方式,我生成了 server-config.wsdd,内容如下: http:/xml.apache.org/axis/wsdd/ 要说明的是,深究上述配置文件具体含义不
5、是本文的目的,要对其具体了解,请参考 Axis 文档。其中,只有下面的 XML 才是我们感兴趣的: 注:sso.Respond 为要注册的类,全路径和类名为了完成自动序列化/反序列化,我们使用“beanMapping”元素指定要进行处理的 bean 文件。只有在 WSDD 中定义了这些,才能享受到 Axis 带来的自动序列化/反序列化优势。 客户端代码:public class TestClient public static void main(String args) try String endpoint = http:/127.0.0.1:8080/services/AuthServi
6、ce?wsdl; Service service = new Service(); Call call = (Call) service.createCall(); QName qn = new QName(urn:BeanService,resp); QName qx = new QName(urn:BeanService,user); /注册 bean call.registerTypeMapping(Respond.class,qn,new BeanSerializerFactory(Respond.class, qn),new BeanDeserializerFactory(Respo
7、nd.class, qn); call.registerTypeMapping(User.class,qx,new BeanSerializerFactory(User.class, qx),new BeanDeserializerFactory(User.class, qx); call.setTargetEndpointAddress(new .URL(endpoint); call.setOperationName(new QName(http:/soapinterop.org/,login); User user = new User(); mul.setName(test); mul
8、.setPassword(test); Respond respond = (Reopond) call.invoke(new Object user); System.out.println(登陆,返回 + respond.getDesc() + 。); catch (Exception e) e.printStackTrace(); 正如我们期望的,打印出“登陆成功”。通过上面的范例,我们发现,Axis 的自动序列化/反序列化机制还是很方便的,除了 bean 以外,其他类型的对象也可以让 Axis 来完成,具体参考 Axis 文档,如果要传递的对象 Axis 未提供自动序列化/反序列化支持
9、,请考虑人工实现,参考:深度编程Axis序列化/反序列化器开发指南。webservice学习之二(实体类的传递) 收藏 SOAP、WSDL、UDDI,这些名词相信只要了解过 Web Service 的都不陌生,根据 Apache 的定义,Axis 是一种 W3C SOAP 实现,国内有些介绍还特别注明了:Axis 并不完全是 SOAP 引擎,它还包括独立的 SOAP 服务器、嵌入 Servlet 引擎的服务器、支持 WSDL 并提供转化 WSDL 为 Java 类的工具、例子程序、TCP/IP 数据包监视工具,等等。Axis 部署 Web Serive 有两种方式,最简单的是拷贝 java 源
10、代码文件到 web 文件夹下把扩展名改为 .jws 直接调用,可参考这篇文章:用Axis 1.1 for Java进行Web Services开发(1)。另一种方式是通过 WSDD(Web Services描述文档)部署,可参考:使用Axis发布简单的Web服务。在我的应用中,使用的是后者,以便 Axis 进行自动序列化/反序列化处理。 实现一次 SSO 登陆验证,最少要传入用户名、密码。为了达到这种目的,在客户端我们构造 User 对象(本文中 User 对象仅包含用户名和密码),并通过 Axis 自动序列化传递出去;到了 SSO 端,Axis 自动反序列化之后还原成 User 对象;最后返
11、回给客户端说明本次登陆的结果,返回的结果不仅仅包含例如“登陆成功”之类的简单信息,也许还有很多其他信息,看来创建一个叫做 Respond 的对象(本文中 Respond 对象仅包含登陆 ID 和结果描述)很有必要了,把 Respond 传回给客户端说明登陆结果。 暴露给客户端供登陆验证的服务类是 AuthService。该类代码简单表示如下:public class AuthService /* * 验证用户名和密码 * param String userName 用户名 * param String passWord 密码 * return Respond 登陆验证后返回 */ public Respond login(User user) String name = user.getName(); String password = user.password(); /进行数据库验证 /. / Respond respond = new Respond(); respond.setId(123); respond.setDesc(登陆成功); return respond; User 和 Respond 以及服务类都写好了。通过命令行方式,我生成了 server-config.wsdd,内容如下: http:/xml.apache.org/axis/wsdd/ paramet
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1