我们将Web Service发布在Tomcat或者其他应用服务器上后,有很多方法可以调用该Web Service,常用的有两种:
1、通过浏览器HTTP调用,返回规范的XML文件内容
2、通过客户端程序调用,返回结果可自定义格式
接下来,我利用Eclipse作为开发工具,演示一个Httpclient调用WebService的简单示例
第一种调用见我的另一篇博文:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/10/3071584.html
步骤如下:
准备工作:用到的jar包有: 下载链接(http://download.csdn.net/detail/lanxuezaipiao/5354480)
第一步:新建Java Project,项目名称为HttpCallWebService
第二步:将所需jar包导入到库中
第三步:编写调用class,这里有两种方式调用,即GET方式和POST方式,由于POST方式较安全,故这里采用POST方式调用;请求数据的构造也有两种方式:静态和动态构造,下面分别介绍这两种方式:
注:这里以E邮宝开放的webservice接口为例调用其中一个API函数,而E邮宝的webservice基于SOAP,故请求数据为SOAP格式,大家可根据自己情况进行修改
静态构造请求数据:
1 package com.http;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.IOException;
5 import java.io.InputStream;
6
7 import org.apache.commons.httpclient.HttpClient;
8 import org.apache.commons.httpclient.HttpException;
9 import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
10 import org.apache.commons.httpclient.methods.PostMethod;
11 import org.apache.commons.httpclient.methods.RequestEntity;
12
13 public class StaticHttpclientCall {
14
15 /**
16 * @param args
17 * @throws IOException
18 * @throws HttpException
19 */
20 public static void main(String[] args) throws HttpException, IOException {
21 // TODO Auto-generated method stub
22
23 String soapRequestData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
24 + "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
25 + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
26 + " xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">"
27 + " <soap12:Body>"
28 + " <GetAPACShippingPackage xmlns=\"http://shippingapi.ebay.cn/\">"
29 + " <GetAPACShippingPackageRequest>"
30 + " <TrackCode>123</TrackCode>"
31 + " <Version>123</Version>"
32 + " <APIDevUserID>123</APIDevUserID>"
33 + " <APIPassword>123</APIPassword>"
34 + " <APISellerUserID>123</APISellerUserID>"
35 + " <MessageID>123</MessageID>"
36 + " </GetAPACShippingPackageRequest>"
37 + " </GetAPACShippingPackage>" + "</soap12:Body>"
38 + " </soap12:Envelope>";
39
40 System.out.println(soapRequestData);
41
42 PostMethod postMethod = new PostMethod(
43 "http://epacketws.pushauction.net/v3/orderservice.asmx?wsdl");
44
45 // 然后把Soap请求数据添加到PostMethod中
46 byte[] b = soapRequestData.getBytes("utf-8");
47 InputStream is = new ByteArrayInputStream(b, 0, b.length);
48 RequestEntity re = new InputStreamRequestEntity(is, b.length,
49 "application/soap+xml; charset=utf-8");
50 postMethod.setRequestEntity(re);
51
52 // 最后生成一个HttpClient对象,并发出postMethod请求
53 HttpClient httpClient = new HttpClient();
54 int statusCode = httpClient.executeMethod(postMethod);
55 if(statusCode == 200) {
56 System.out.println("调用成功!");
57 String soapResponseData = postMethod.getResponseBodyAsString();
58 System.out.println(soapResponseData);
59 }
60 else {
61 System.out.println("调用失败!错误码:" + statusCode);
62 }
63
64 }
65
66 }
动态构造数据:
1 package com.http;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.InputStream;
5 import java.util.HashMap;
6 import java.util.Map;
7 import java.util.Set;
8
9 import org.apache.commons.httpclient.HttpClient;
10 import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
11 import org.apache.commons.httpclient.methods.PostMethod;
12 import org.apache.commons.httpclient.methods.RequestEntity;
13
14 // 动态构造调用串,灵活性更大
15 public class DynamicHttpclientCall {
16
17 private String namespace;
18 private String methodName;
19 private String wsdlLocation;
20 private String soapResponseData;
21
22 public DynamicHttpclientCall(String namespace, String methodName,
23 String wsdlLocation) {
24
25 this.namespace = namespace;
26 this.methodName = methodName;
27 this.wsdlLocation = wsdlLocation;
28 }
29
30 private int invoke(Map<String, String> patameterMap) throws Exception {
31 PostMethod postMethod = new PostMethod(wsdlLocation);
32 String soapRequestData = buildRequestData(patameterMap);
33
34 byte[] bytes = soapRequestData.getBytes("utf-8");
35 InputStream inputStream = new ByteArrayInputStream(bytes, 0,
36 bytes.length);
37 RequestEntity requestEntity = new InputStreamRequestEntity(inputStream,
38 bytes.length, "application/soap+xml; charset=utf-8");
39 postMethod.setRequestEntity(requestEntity);
40
41 HttpClient httpClient = new HttpClient();
42 int statusCode = httpClient.executeMethod(postMethod);
43 soapResponseData = postMethod.getResponseBodyAsString();
44
45 return statusCode;
46 }
47
48 private String buildRequestData(Map<String, String> patameterMap) {
49 StringBuffer soapRequestData = new StringBuffer();
50 soapRequestData.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
51 soapRequestData
52 .append("<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
53 + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
54 + " xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">");
55 soapRequestData.append("<soap12:Body>");
56 soapRequestData.append("<" + methodName + " xmlns=\"" + namespace
57 + "\">");
58 soapRequestData.append("<" + methodName + "Request>");
59
60 Set<String> nameSet = patameterMap.keySet();
61 for (String name : nameSet) {
62 soapRequestData.append("<" + name + ">" + patameterMap.get(name)
63 + "</" + name + ">");
64 }
65
66 soapRequestData.append("</" + methodName + "Request>");
67 soapRequestData.append("</" + methodName + ">");
68 soapRequestData.append("</soap12:Body>");
69 soapRequestData.append("</soap12:Envelope>");
70
71 return soapRequestData.toString();
72 }
73
74 /**
75 * @param args
76 * @throws Exception
77 */
78 public static void main(String[] args) throws Exception {
79 // TODO Auto-generated method stub
80
81 DynamicHttpclientCall dynamicHttpclientCall = new DynamicHttpclientCall(
82 "http://shippingapi.ebay.cn/", "GetAPACShippingPackage",
83 "http://epacketws.pushauction.net/v3/orderservice.asmx?wsdl");
84
85 Map<String, String> patameterMap = new HashMap<String, String>();
86
87 patameterMap.put("TrackCode", "123");
88 patameterMap.put("Version", "123");
89 patameterMap.put("APIDevUserID", "123");
90 patameterMap.put("APIPassword", "123");
91 patameterMap.put("APISellerUserID", "123");
92 patameterMap.put("MessageID", "123");
93 patameterMap.put("TrackCode", "123");
94
95 String soapRequestData = dynamicHttpclientCall.buildRequestData(patameterMap);
96 System.out.println(soapRequestData);
97
98 int statusCode = dynamicHttpclientCall.invoke(patameterMap);
99 if(statusCode == 200) {
100 System.out.println("调用成功!");
101 System.out.println(dynamicHttpclientCall.soapResponseData);
102 }
103 else {
104 System.out.println("调用失败!错误码:" + statusCode);
105 }
106
107 }
108
109 }
最终运行结果:
可见最终返回的也是xml格式的数据,这里数据未进行格式化显示和处理
分享到:
相关推荐
一个使用HttpClient访问WS 的例子,包含相关jar包
希望用http协议的能可以帮到大家!很有使用价值!大家可以看看!
httpclient调用webservice.txt
commons-codec-1.4.jar、commons-httpclient-3.0.1.jar、commons-logging-1.1.1.jar
http远程接口调用-httpClient+跳过SSL证书校验. 里面分别有3个httpClient的工具类代码。 还有一个专门为了跳过SSL证书校验的工具类。
webservice调用实例,通过HttpClient调用,包括完整参数调用,项目通过maven搭建
ETL KETTLE 中利用Httpclient 调用webservice接口获取XML数据,并解析XML 数据。 完整的KTR实例
Java爬虫【一篇文章精通系列-案例开发-巨细】HttpClient5 + jsoup + WebMagic + spider-flow【万字长文一篇文章学会】
HttpClient-4.0.1中文文档下载+官方教程
HttpClient发送http请求(post+get)需要的jar包+内符java代码案例+注解详解
用来动态调用web service
WebApi系列-通过HttpClient来调用WebApi接口.doc
WebService客户端调用WebService服务示例代码,java代码,纯手工,包括直接httpClient直接发送Saop报文调用和利用wsimport -keep 生成客户端代码后调用两种方式的示例。因涉及商务账户密码隐私,因此代码中的有些账号...
本demo有两个例子test是作为服务端开启的,httpclient是客户端调用的,模拟服务端的test在启动后是没有界面的,要加上id才能看到json数据,httpclient的HttpClient33.java是测试类,最后的结果是接受到一个对象。...
HttpClient接口调用工具类 (Post请求 get请求 put请求 delete请求 下载就可以用 )
c++封装的一个http的类,特别好用。
HttpClient工具访问WebService所需jar包 包含:com.springsource.org.apache.commons.httpclient-3.1.0 、commons-codec-1.3.jar、commons-logging-1.1.1.jar
相信大家在调用rest webservice通常使用httpclient.该示例代码是使用httpconnection的形式,以POST和GET两种方式提交调用REST WebService。在项目中一直使用的工具类,分享给大家
java采用httpclient和xfire两种方式调用webservice,此示例是调用的一个短信接口.
httpclient方式调用url