日志分类:WebService

HttpClient调用webservice

2010年07月6日 9:31 下午  |  分类:WebService

webservice调用总结

WebService以其不可比拟的优越性,在实际应用中,深受开发人员的欢迎。以前实验室的项目多是采用AXIS2作为webservice的解决方案,虽然其作为服务器端性能不错,但是其作为客户端存在稍显笨重,不易开发人员迅速上手的问题。接触了一段时间的HttpClient,于是最近尝试了一下通过httpclient,进行webservice客户端请求的调用,整个过程感觉效果不错。其实,webservice的本质就是一个遵循soap协议的远程调用过程。无论是AXIS2、Xfire还是httpclient,其只是帮我们封装好了一些调用方法,方便我们的调用。我们完全可以不通过这些方法,通过java提供的标准api,封装一个soap请求,进行http请求,完成我们的调用过程(这里讨论的不包含webservice发布问题)。这也是为什么基本上每一个面向公众的webservice商业应用都会提供Endpoint、Disco、WSDL三种参数入口:

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
/**
 * 类作用:演示了如何通过get、post以及httpclient封装soap请求三种方式调用webservice
 * @author qsw-Myonlystar @date 2010-7-6
 * @mail i@qinshuwei.com
 * 说明:调用的webservice为http://webservice.webxml.com.cn网站的火车站查询服务
 */
public class Test {
	/**
	 * 通过get方式演示webservice
	 */
	private void getMethodWS(){
		DefaultHttpClient httpclient = new DefaultHttpClient();
		HttpGet httpget = new HttpGet("http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getStationName");
		ResponseHandler<String> responseHandler = new BasicResponseHandler();
		String responseBody = null;
		try {
			responseBody = httpclient.execute(httpget, responseHandler);
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(responseBody);
		httpclient.getConnectionManager().shutdown();	
	}
	/**
	 * 通过post方式调用webservice
	 * @throws UnsupportedEncodingException
	 */
	private void postMethodWS(){
		DefaultHttpClient httpclient = new DefaultHttpClient();
		HttpPost httpost = new HttpPost(
				"http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getStationAndTimeByTrainCode");
		List<NameValuePair> nvps = new ArrayList<NameValuePair>();
		nvps.add(new BasicNameValuePair("TrainCode",null));
		nvps.add(new BasicNameValuePair("UserID", null));
		UrlEncodedFormEntity urlEntity = null;
		try {
			urlEntity = new UrlEncodedFormEntity(nvps,
					HTTP.UTF_8);
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		httpost.setEntity(urlEntity);
		ResponseHandler<String> responseHandler = new BasicResponseHandler();
		String responseBody = null;
		try {
			responseBody = httpclient.execute(httpost, responseHandler);
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(responseBody);
		httpclient.getConnectionManager().shutdown();	
	}
	/**
	 * 通过soap方式调用webservice
	 * @throws IOException 
	 * @throws ClientProtocolException 
	 */
	private void soapMethodWS(){
 
		String soapRequestData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
				+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
				+ "<soap:Body>"
				+ "<getStationName xmlns=\"http://WebXml.com.cn/\" />"
				+ "</soap:Body>" + "</soap:Envelope>";
		DefaultHttpClient httpclient = new DefaultHttpClient();
		HttpPost httpost = new HttpPost("http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx"); 
		httpost.setHeader("Content-Type", "text/xml; charset=utf-8");
		HttpEntity entity = null;
		try {
			entity = new StringEntity(soapRequestData);
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} 
		httpost.setEntity(entity);
		ResponseHandler<String> responseHandler = new BasicResponseHandler();
		String responseBody = null;
		try {
			responseBody = httpclient.execute(httpost, responseHandler);
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(responseBody);
		httpclient.getConnectionManager().shutdown();
	}
 
	/**
	 * @param args
	 * @throws IOException
	 * @throws ClientProtocolException
	 */
	public static void main(String[] args){
		Test t=new Test();
		t.getMethodWS();//get方式测试
		t.soapMethodWS();//soap方式测试
		t.postMethodWS();//post方式测试
	}
 
}

WebService使用的一些总结

2010年01月26日 2:47 下午  |  分类:WebService

WebService的使用是从SDX项目开始的,一直没拿出时间整理一下,趁着年前这段时间,梳理一下知识,也把自己从项目实践中得到的关于WebSerice的经验贴出来,大家分享一下:
OK,开始进入正题:
全文阅读 »

简单的webservice实例

2009年06月13日 2:39 下午  |  分类:WebService

原文出处:http://deltaj.javaeye.com/blog/287067

axis2 是新一代的web service开发工具,它会让你的web service开发变得轻松,快捷。下面让我们以一个实际的例子来体验一下。

首先,工欲善其事,必先利其器。就让我们先做好一些必备的准备工作吧。

1.下载axis2 的2进制的包和war,现在的最新版本是1.4.1 发布时间是2008-8-25

地址分别是:http://apache.mirror.phpchina.com/ws/axis2/1_4_1/axis2-1.4.1-bin.zip

http://apache.mirror.phpchina.com/ws/axis2/1_4_1/axis2-1.4.1-war.zip

2.把下载后的war放入tomcat的webapps目录里,然后启动tomcat,这样war包就会自动解压为目录axis2

在浏览器中输入http://localhost:8080/axis2/ ,如果一切正常你会看到下面的画面 全文阅读 »

WebService了解

2009年06月13日 9:37 上午  |  分类:WebService

网上看到的文章,感觉思路很清晰,总结的也很好,就在这里转帖一下。

原文出处:http://www.javaeye.com/topic/138363

 

WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。
第一次看到这么一个概念,有点不知其意。经过各方面知识的拓展。现在通过自己的经验来分析一下。Webservice是一种可以接收从Internet其他系统中传递过来的请求。先说请求:初学时就知道一个get请求和一个post请求,这都是http协议的。而网络协议多多,请求类型也很多,近期接触一个项目用到的就是soap请求。Soap-simple object access protocol简单对象访问协议,这个就是发送一个xml./http请求,得到的数据也都是xml形式。我们的需求就是用web程序去某c/s构架的系统中采集数据,这个系统提供一系统的北向接口,我们就可以通过soap得到该系统的一些数据。这也算是系统之间的简单交互了。但是,我们做的这个针对性特别强,我们要采集这个系统的数据,就必须使用这个系统提供的接口。那么webservice 一定是一套通用的接口。也就是说,你的系统想提花这样的接口就得按webservice的标准去提供,别的系统想用你系统的数据,就得按webservice提供的取法去取。

――――――这是学习前的一点猜想,下面带着这些猜想去看看webservice到底能干什么! 全文阅读 »