简易天气java论文_简单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项的内容

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值