简单PC端调用天气预报Web Service的Demo分析(Java)

由于前一篇关于Web Service的文章被大家说没有技术含量,我决定对一个简单的Web Service的客户端的代码进行一下分析。

如过你不理解Web Service的概念以及它的基本模型,建议你首先阅读上一篇文章。

下面介绍怎样用代码实现Web Service。

首先打开eclipse新建一个Java工程,去网上下载一个ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar(别看它的名字里带着android,但是非安卓程序也可以使用这个包),然后将这个包导入你的工程。

前提是你要知道你调用的Web Service的URL命名空间以及方法名称(可以从该Web Service的WSDL中获知)。

import java.io.IOException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;  
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

public class Text {
	private static final String NAMESPACE = "http://WebXml.com.cn/";  //命名空间
	private static final String METHOD_NAME = "getWeatherbyCityName"; //方法名称
	private SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);  //用命名空间和方法名称构造一个SoapObject类的实例,作为我们与Web Service通信的信纸
	private static String URL = "http://www.webxml.com.cn/webservices/weatherwebservice.asmx";  //Web Service的URL
	private static String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName";  
	//SOAP Action是“确定执行某一行为的路径”,有些SOAP消息中指明了执行某个命名空间中的某个方法,这时SOAP Action是多余的,下面用到SOAP_ACTION时传null即可
	/*但是有些时候SOAP消息并没有显式的指定要调用的服务方法名,而是利用底层的传输协议发送(这样的话,一般会被Web services忽视),例如使用HTTP的Post方式发送的SOAP消息(SOAP消息被放置在HTTP包的包体中)。这时就必须
	指定SOAP_ACTION的值,所以为了确保调用成功,还是指定SOAP Action比较好,就是该Web Service方法的命名空间加上方法名字*/
	public SoapObject detail;  //服务端给我们回信的信纸
	

	public void execute(){
		rpc.addProperty("theCityName", "哈尔滨");//将我们要传递给Web Service的参数写在信纸上
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);                         //构造一个信封,构造函数传的参数是Soap协议的版本号,需要根据We bService端的版本号进行设置,大部分情况是Version1.1,也即传VER11即可
		envelope.bodyOut = rpc;  //将信纸装进信封
		envelope.dotNet = true;  //为了兼容性要加上这一句
//		envelope.setOutputSoapObject(rpc); 
		HttpTransportSE ht = new HttpTransportSE(URL);   // 用Web Service的URL构造为我们送信的类的实例(邮递员)
		try {
			ht.call(SOAP_ACTION, envelope);// 邮递员将信成功送到,并将回信装在了原来的信封中
			detail =(SoapObject) envelope.getResponse();  //打开信封,获得回信,将java.lang.Object类型强转成SoapObject类型
		} catch (IOException e) {
			e.printStackTrace();
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		}  
	}
	
	public static void main(String[] args){
		System.out.println("begin:");
		Text t = new Text();
		t.execute();
		System.out.println("received:");
		System.out.println("detail" + t.detail);  //输出回信内容
		System.out.println("detail" + t.detail.getProperty(5));//如果回信是一个数组的话,可以调用getProperty(int n)方法获取回信中第n项的内容
	}
}


 

你可能感兴趣的:(简单PC端调用天气预报Web Service的Demo分析(Java))