豆子小说网
http://www.dzxiaoshuo.com
最近一个项目用到了短信接口,对方提供的是一个web services接口。由于是第一次接触web services,一开始想到了用土方法 解析xml,但是后来发现有很多框架,所以用了axis。 但是,做到后来不知道怎么去将返回的结果序列化成自己定义的一个对象。在互联网上找了很多资料。还是那句老话,都是抄过来抄过去,一点技术含量都没有。我真是从心里很鄙视这帮人,人家写的东西,自己也不试试,就直接抄过来。
废话不多说,上代码:
最近一个项目用到了短信接口,对方提供的是一个web services接口。由于是第一次接触web services,一开始想到了用土方法 解析xml,但是后来发现有很多框架,所以用了axis。 但是,做到后来不知道怎么去将返回的结果序列化成自己定义的一个对象。在互联网上找了很多资料。还是那句老话,都是抄过来抄过去,一点技术含量都没有。我真是从心里很鄙视这帮人,人家写的东西,自己也不试试,就直接抄过来。
废话不多说,上代码:
- 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());
- }
- }
- }
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());
}
}
}
- import java.io.Serializable;
- import javax.xml.namespace.QName;
- import org.apache.axis.description.ElementDesc;
- import org.apache.axis.description.TypeDesc;
- public class SimpleObject implements Serializable {
- private static final long serialVersionUID = 5196131949777577778L;
- private static TypeDesc typeDesc = new TypeDesc(SimpleObject.class, true);
- private int state;
- private String msgID;
- private String msgState;
- private int reserve;
- //反序列化
- static {
- typeDesc.setXmlType(new QName("http://tempuri.org/", "CSubmitState"));
- ElementDesc elemField = new ElementDesc();
- elemField.setFieldName("state");
- elemField.setXmlName(new QName("http://tempuri.org/", "State"));
- elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema", "int"));
- elemField.setNillable(false);
- typeDesc.addFieldDesc(elemField);
- elemField = new ElementDesc();
- elemField.setFieldName("msgID");
- elemField.setXmlName(new QName("http://tempuri.org/", "MsgID"));
- elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema", "string"));
- elemField.setNillable(false);
- typeDesc.addFieldDesc(elemField);
- elemField = new ElementDesc();
- elemField.setFieldName("msgState");
- elemField.setXmlName(new QName("http://tempuri.org/", "MsgState"));
- elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema", "string"));
- elemField.setNillable(false);
- typeDesc.addFieldDesc(elemField);
- elemField = new ElementDesc();
- elemField.setFieldName("reserve");
- elemField.setXmlName(new QName("http://tempuri.org/", "Reserve"));
- elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema", "int"));
- elemField.setNillable(false);
- typeDesc.addFieldDesc(elemField);
- }
- /**
- * Return type metadata object
- */
- public static TypeDesc getTypeDesc() {
- return typeDesc;
- }
- public int getState() {
- return state;
- }
- public void setState(int state) {
- this.state = state;
- }
- public String getMsgID() {
- return msgID;
- }
- public void setMsgID(String msgID) {
- this.msgID = msgID;
- }
- public String getMsgState() {
- return msgState;
- }
- public void setMsgState(String msgState) {
- this.msgState = msgState;
- }
- public int getReserve() {
- return reserve;
- }
- public void setReserve(int reserve) {
- this.reserve = reserve;
- }
- }
代码其实写的已经很简单了,需要下载axis,我用的是1.x版本的,代码绝对可以运行。如果你不知道怎么反序列化一个对象,请具体参考SimpleObject类,至于具体的类的属性,请参见webservice的xml文件,那上面的已经写的很清楚。