web services返回自定义的对象

 

豆子小说网 http://www.dzxiaoshuo.com

最近一个项目用到了短信接口,对方提供的是一个web services接口。由于是第一次接触web services,一开始想到了用土方法 解析xml,但是后来发现有很多框架,所以用了axis。 但是,做到后来不知道怎么去将返回的结果序列化成自己定义的一个对象。在互联网上找了很多资料。还是那句老话,都是抄过来抄过去,一点技术含量都没有。我真是从心里很鄙视这帮人,人家写的东西,自己也不试试,就直接抄过来。

废话不多说,上代码:
 
  1. import javax.xml.namespace.QName;   
  2. import javax.xml.rpc.ParameterMode;   
  3.   
  4. import org.apache.axis.Constants;   
  5. import org.apache.axis.client.Call;   
  6. import org.apache.axis.client.Service;   
  7. import org.apache.axis.encoding.ser.BeanDeserializerFactory;   
  8. import org.apache.axis.encoding.ser.BeanSerializerFactory;   
  9.   
  10. public class TestWebService {   
  11.   
  12.     public static void main(String[] args) {   
  13.         try {   
  14.             //被调用的webserivces参数名   
  15.                  String parameter[] = { "sname""spwd""scorpid""sprdid""sdst""smsg" };   
  16.                //被调用的webserivces参数名所对应的值,如果你调用请更换这些参数名跟值   
  17.             String value[] = { "dllulx00""338659""1""2""15010439786""hello" };   
  18.                             //被调用的webservices的地址   
  19.             String url = "http://dx.umob.cn/submitdata/Service.asmx";   
  20.                //被调用的webservices的namespace             
  21. String nameSpace = "http://tempuri.org/";   
  22.                             //被调用的webservices的方法   
  23.             String method = "g_Submit";   
  24.   
  25.             Service service = new Service();   
  26.             Call call = (Call) service.createCall();   
  27.             call.setTargetEndpointAddress(new java.net.URL(url));   
  28.             call.setUseSOAPAction(true);   
  29.             call.setSOAPActionURI(nameSpace + method);   
  30.                
  31.             // 注册对象   
  32.             QName qn = new QName(nameSpace, "CSubmitState");   
  33.             call.registerTypeMapping(SimpleObject.class, qn, new BeanSerializerFactory(SimpleObject.class, qn), new BeanDeserializerFactory(SimpleObject.class, qn));   
  34.   
  35.             call.setOperationName(new QName(nameSpace, method));   
  36.   
  37.             call.addParameter(new QName(nameSpace, parameter[0]), Constants.XSD_STRING, ParameterMode.IN);   
  38.             call.addParameter(new QName(nameSpace, parameter[1]), Constants.XSD_STRING, ParameterMode.IN);   
  39.             call.addParameter(new QName(nameSpace, parameter[2]), Constants.XSD_STRING, ParameterMode.IN);   
  40.             call.addParameter(new QName(nameSpace, parameter[3]), Constants.XSD_STRING, ParameterMode.IN);   
  41.             call.addParameter(new QName(nameSpace, parameter[4]), Constants.XSD_STRING, ParameterMode.IN);   
  42.             call.addParameter(new QName(nameSpace, parameter[5]), Constants.XSD_STRING, ParameterMode.IN);   
  43.   
  44.             call.setReturnType(qn);   
  45.   
  46.             SimpleObject so = (SimpleObject) call.invoke(new Object[] { value[0], value[1], value[2], value[3], value[4], value[5] });   
  47.             System.out.println(so.getMsgID());   
  48.             System.out.println(so.getMsgState());   
  49.             System.out.println(so.getState());   
  50.             System.out.println(so.getReserve());   
  51.   
  52.         } catch (Exception e) {   
  53.             System.err.println(e.toString());   
  54.         }   
  55.     }   
  56.   
  57. }  
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;

import org.apache.axis.Constants;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;

public class TestWebService {

	public static void main(String[] args) {
		try {
			//被调用的webserivces参数名
                 String parameter[] = { "sname", "spwd", "scorpid", "sprdid", "sdst", "smsg" };
               //被调用的webserivces参数名所对应的值,如果你调用请更换这些参数名跟值
			String value[] = { "dllulx00", "338659", "1", "2", "15010439786", "hello" };
                            //被调用的webservices的地址
			String url = "http://dx.umob.cn/submitdata/Service.asmx";
               //被调用的webservices的namespace			
String nameSpace = "http://tempuri.org/";
                            //被调用的webservices的方法
			String method = "g_Submit";

			Service service = new Service();
			Call call = (Call) service.createCall();
			call.setTargetEndpointAddress(new java.net.URL(url));
			call.setUseSOAPAction(true);
			call.setSOAPActionURI(nameSpace + method);
			
			// 注册对象
			QName qn = new QName(nameSpace, "CSubmitState");
			call.registerTypeMapping(SimpleObject.class, qn, new BeanSerializerFactory(SimpleObject.class, qn), new BeanDeserializerFactory(SimpleObject.class, qn));

			call.setOperationName(new QName(nameSpace, method));

			call.addParameter(new QName(nameSpace, parameter[0]), Constants.XSD_STRING, ParameterMode.IN);
			call.addParameter(new QName(nameSpace, parameter[1]), Constants.XSD_STRING, ParameterMode.IN);
			call.addParameter(new QName(nameSpace, parameter[2]), Constants.XSD_STRING, ParameterMode.IN);
			call.addParameter(new QName(nameSpace, parameter[3]), Constants.XSD_STRING, ParameterMode.IN);
			call.addParameter(new QName(nameSpace, parameter[4]), Constants.XSD_STRING, ParameterMode.IN);
			call.addParameter(new QName(nameSpace, parameter[5]), Constants.XSD_STRING, ParameterMode.IN);

			call.setReturnType(qn);

			SimpleObject so = (SimpleObject) call.invoke(new Object[] { value[0], value[1], value[2], value[3], value[4], value[5] });
			System.out.println(so.getMsgID());
			System.out.println(so.getMsgState());
			System.out.println(so.getState());
			System.out.println(so.getReserve());

		} catch (Exception e) {
			System.err.println(e.toString());
		}
	}

}



Java代码
  1. import java.io.Serializable;   
  2.   
  3. import javax.xml.namespace.QName;   
  4.   
  5. import org.apache.axis.description.ElementDesc;   
  6. import org.apache.axis.description.TypeDesc;   
  7.   
  8. public class SimpleObject implements Serializable {   
  9.   
  10.     private static final long serialVersionUID = 5196131949777577778L;   
  11.   
  12.     private static TypeDesc typeDesc = new TypeDesc(SimpleObject.classtrue);   
  13.   
  14.     private int state;   
  15.     private String msgID;   
  16.     private String msgState;   
  17.     private int reserve;   
  18.     //反序列化   
  19.     static {   
  20.         typeDesc.setXmlType(new QName("http://tempuri.org/""CSubmitState"));   
  21.            
  22.         ElementDesc elemField = new ElementDesc();   
  23.         elemField.setFieldName("state");   
  24.         elemField.setXmlName(new QName("http://tempuri.org/""State"));   
  25.         elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema""int"));   
  26.         elemField.setNillable(false);   
  27.         typeDesc.addFieldDesc(elemField);   
  28.            
  29.         elemField = new ElementDesc();   
  30.         elemField.setFieldName("msgID");   
  31.         elemField.setXmlName(new QName("http://tempuri.org/""MsgID"));   
  32.         elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema""string"));   
  33.         elemField.setNillable(false);   
  34.         typeDesc.addFieldDesc(elemField);   
  35.            
  36.         elemField = new ElementDesc();   
  37.         elemField.setFieldName("msgState");   
  38.         elemField.setXmlName(new QName("http://tempuri.org/""MsgState"));   
  39.         elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema""string"));   
  40.         elemField.setNillable(false);   
  41.         typeDesc.addFieldDesc(elemField);   
  42.            
  43.         elemField = new ElementDesc();   
  44.         elemField.setFieldName("reserve");   
  45.         elemField.setXmlName(new QName("http://tempuri.org/""Reserve"));   
  46.         elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema""int"));   
  47.         elemField.setNillable(false);   
  48.         typeDesc.addFieldDesc(elemField);   
  49.     }   
  50.   
  51.     /**  
  52.      * Return type metadata object  
  53.      */  
  54.     public static TypeDesc getTypeDesc() {   
  55.         return typeDesc;   
  56.     }   
  57.        
  58.     public int getState() {   
  59.         return state;   
  60.     }   
  61.   
  62.     public void setState(int state) {   
  63.         this.state = state;   
  64.     }   
  65.   
  66.     public String getMsgID() {   
  67.         return msgID;   
  68.     }   
  69.   
  70.     public void setMsgID(String msgID) {   
  71.         this.msgID = msgID;   
  72.     }   
  73.   
  74.     public String getMsgState() {   
  75.         return msgState;   
  76.     }   
  77.   
  78.     public void setMsgState(String msgState) {   
  79.         this.msgState = msgState;   
  80.     }   
  81.   
  82.     public int getReserve() {   
  83.         return reserve;   
  84.     }   
  85.   
  86.     public void setReserve(int reserve) {   
  87.         this.reserve = reserve;   
  88.     }   
  89.   
  90. }  



代码其实写的已经很简单了,需要下载axis,我用的是1.x版本的,代码绝对可以运行。如果你不知道怎么反序列化一个对象,请具体参考SimpleObject类,至于具体的类的属性,请参见webservice的xml文件,那上面的已经写的很清楚。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RESTful Web Services中文版 1,3,4章 缺第二章和其他章节,源码网无色会在第一时间补齐,敬请关注本页。 本身完整目录: 目录 序.......................................I. -------------------------------------------- 前言.....................................III -------------------------------------------- 第1章:Programmable.Web及其分类..........1 Programmable.Web的分类...................4 HTTP:信封里的文档.......................5 方法信息.................................8 作用域信息...............................11 相互竞争的服务架构.......................13 Programmable.Web涉及的技术...............18 其他术语.................................20 -------------------------------------------- 第2章:编写Web服务客户端.................23 Web服务就像网站..........................23 del.icio.us:示例应用....................26 用HTTP库发送请求.........................29 用XML解析器处理响应......................38 JSON.Parsers:处理序列化数据.............44 WADL简化客户端的编写.....................47 -------------------------------------------- 第3章:REST式服务有什么特别不同?.........49 介绍Simple.Storage.Service...............49 S3的面向对象设计.........................50 资源.....................................52 HTTP响应代码.............................54 一个S3客户端.............................55 对请求进行签名及访问控制.................64 使用S3客户端库...........................70 用ActiveResource创建透明的客户端.........71 最后的话.................................77 -------------------------------------------- 第4章:面向资源的架构....................79 面向资源的架构?.........................79 什么是资源?.............................81 URIs.....................................81 可寻址性.................................84 无状态性.................................86 表示.....................................91 链接与连通性.............................94 统一接口.................................97 结束了!.................................105 -------------------------------------------- 第5章:设计只读的面向资源的服务..........107 资源设计.................................108 根据需求创建只读资源.....................109 规划数据集...............................110 把数据集划分为资源.......................112 命

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值