axis实现webservice 返回对象和数组

axis1传递简单对象,对象内只有基本类型,如:String,int等

1.创建一个javaBean,类名为User。

Java代码
  1. package com.devtek;
  2. publicclass User {
  3. private String name="llc";
  4. privateint age = 25;
  5. public String toString() {
  6. return"name " + name + " age " + age ;
  7. }
  8. publicint getAge() {
  9. return age;
  10. }
  11. publicvoid setAge(int age) {
  12. this.age = age;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. publicvoid setName(String name) {
  18. this.name = name;
  19. }
  20. }
2. 服务端编写。

Java代码
  1. package com.devtek;
  2. publicclass ServiceServer {
  3. // 参数和返回值不包含对象
  4. public String getName(String name) {
  5. if (name == null) {
  6. name = "";
  7. }
  8. return"你好" + name + ",欢迎来到Web服务的世界!";
  9. }
  10. public String getUserName(User user) {
  11. return user.getName();
  12. }
  13. public User getUser(String name, String password) {
  14. returnnew User();
  15. }
  16. // 返回简单的对象(只包含基本的类型)
  17. public User getUser(User user) {
  18. System.out.println(user.getName());
  19. return user;
  20. }
  21. }
 


3. 发布服务,在server-confing.wsdd文件中进行配置。

Java代码
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <deployment name="defaultClientConfig"
  3. xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
  4. xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler"
  5. xmlns="http://xml.apache.org/axis/wsdd/">
  6. <globalConfiguration name="defaultClientConfig">
  7. <requestFlow name="RequestFlow1" type="">
  8. <handler name="Handler1"
  9. type="java:org.apache.axis.handlers.JWSHandler">
  10. <parameter name="scope" value="session" />
  11. </handler>
  12. <handler name="Handler2"
  13. type="java:org.apache.axis.handlers.JWSHandler">
  14. <parameter name="scope" value="request" />
  15. <parameter name="extension" value=".jwr" />
  16. </handler>
  17. </requestFlow>
  18. </globalConfiguration>
  19. <handler name="URLMapper"
  20. type="java:org.apache.axis.handlers.http.URLMapper" />
  21. <handler name="LocalResponder"
  22. type="java:org.apache.axis.transport.local.LocalResponder" />
  23. <handler name="Authenticate"
  24. type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
  25. <transport name="http" type="">
  26. <requestFlow name="RequestFlow1" type="">
  27. <handler name="Handler1" type="URLMapper" />
  28. <handler name="Handler2"
  29. type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
  30. </requestFlow>
  31. </transport>
  32. <transport name="local" type="">
  33. <responseFlow name="ResponseFlow1" type="">
  34. <handler name="Handler1" type="LocalResponder" />
  35. </responseFlow>
  36. </transport>
  37. <!--这里配置了一个Web Service,如果有多个Web Service,就按这种格式在下面增加即可-->
  38. <service name="User" provider="java:RPC">
  39. <!-- 作用域 -->
  40. <parameter name="scope" value="Request" />
  41. <!-- 发布的webservice类名 -->
  42. <parameter name="className" value="com.devtek.ServiceServer" />
  43. <!-- 发布webservice方法,value="*"'*'代表所有, 如果不想发布所有的方法,可以在
  44. value 中,每个方法用空格分开,如发布两个方法:value="getUserName getUser"
  45. -->
  46. <parameter name="allowedMethods" value="*" />
  47. <!-- 对象映射,一对象为参数或返回值 -->
  48. <beanMapping languageSpecificType="java:com.devtek.User"
  49. qname="ns1:User" xmlns:ns1="com.devtek" />
  50. <!-- 类型映射,将对象进行序列化(out)和反序列化(in) -->
  51. <typeMapping languageSpecificType="java:com.devtek.User"
  52. qname="ns1:User" xmlns:ns1="com.devtek"
  53. deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
  54. serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"/>
  55. <namespace>com.devtek</namespace>
  56. </service>
  57. </deployment>

4. 客户端调用。

Java代码
  1. package com.devtek;
  2. import javax.xml.namespace.QName;
  3. import org.apache.axis.client.Call;
  4. import org.apache.axis.client.Service;
  5. import org.apache.axis.encoding.ser.BeanDeserializerFactory;
  6. import org.apache.axis.encoding.ser.BeanSerializerFactory;
  7. publicclass Client {
  8. publicstaticvoid main(String[] args) {
  9. try {
  10. String endpoint = "http://127.0.0.1:8089/axis1/webservices/User?wsdl";
  11. Service service = new Service();
  12. Call call = null;
  13. QName qn = new QName("http://127.0.0.1:8089/axis1/webservices/User",
  14. "getUser");
  15. call = (Call) service.createCall();
  16. // 注册序列化和反序列化类
  17. call.registerTypeMapping(User.class, qn,
  18. new BeanSerializerFactory(User.class, qn),
  19. new BeanDeserializerFactory(User.class, qn));
  20. // 设置返回类型
  21. call.setReturnType(qn, User.class);
  22. call.setOperationName(qn);
  23. call.setTargetEndpointAddress(new java.net.URL(endpoint));
  24. call.addParameter("user", qn, javax.xml.rpc.ParameterMode.IN);
  25. User user = new User();
  26. User ret = (User) call.invoke(new Object[] { user });
  27. System.out.println("return value is " + ret);
  28. } catch (Exception ex) {
  29. ex.printStackTrace();
  30. }
  31. }
  32. }


1. 在服务类serviceServer中增加一个方法:

public User[] getUserList(User[] user) {
return user;
}

2. 在server-config.wsdd的<service>中增加一个<arrayMapping>标签,标签内配置自定义对象数组。

<!-- 配置自定义对象数组type,将对象数组进行序列化和反序列化 -->
<arrayMapping languageSpecificType="java:com.devtek.User[]"
qname="ns1:User" xmlns:ns1="com.devtek"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"/>

3. 客户端调用。

Java代码
  1. publicstaticvoid main(String[] args) {
  2. User[] ret = null;
  3. try {
  4. String endpoint = "http://127.0.0.1:8089/axis1/webservices/User?wsdl";
  5. Service service = new Service();
  6. Call call = null;
  7. QName qn = new QName("http://127.0.0.1:8089/axis1/webservices/User",
  8. "getUserList");
  9. call = (Call) service.createCall();
  10. // 注册序列化和反序列化类
  11. call.registerTypeMapping(User.class, qn,
  12. new BeanSerializerFactory(User.class, qn),
  13. new BeanDeserializerFactory(User.class, qn));
  14. // 设置返回类型
  15. call.setReturnType(qn, User[].class);
  16. // 设置方法
  17. call.setOperationName(qn);
  18. call.setTargetEndpointAddress(new java.net.URL(endpoint));
  19. call.addParameter("user", qn, javax.xml.rpc.ParameterMode.IN);
  20. User[] user = new User[]{new User(),new User()};
  21. ret = (User[]) call.invoke(new Object[] { user });
  22. System.out.println("return value is " + (User)ret[1]);
  23. } catch (Exception ex) {
  24. ex.printStackTrace();
  25. }
  26. return ret;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值