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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值