我们将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格式的数据,这里数据未进行格式化显示和处理
相关推荐
在Android开发中,调用Web Service来实现手机归属地查询是一项常见的需求,这通常涉及到网络通信、XML或JSON解析以及Web服务接口的调用。在这个过程中,开发者需要掌握以下关键知识点: 1. **Web Service**: Web ...
总的来说,通过Axis调用WebService接口,开发者可以轻松地与远程系统进行交互,实现跨平台的数据共享。了解并熟练掌握Axis的使用,将极大地提高开发效率,降低系统集成的复杂度。提供的jar包和案例为初学者提供了...
#### 创建WebService示例:使用Java与XFire 为了在Eclipse中使用XFire开发WebService,首先需确保JDK和Tomcat环境正确配置,以及具备基本的Java编程技能和Tomcat部署知识。以下步骤指导如何创建一个简单的...
5. Code:本示例项目包含源代码,展示了如何在Android应用中集成和使用URLConnection和HttpClient进行WebService调用。这对于初学者和有经验的开发者都是一个宝贵的参考资料,可以帮助他们更好地理解网络通信的实现...
这个项目可能演示了如何创建一个简单的Java Web服务,并提供了一个示例客户端来调用该服务。你可以通过导入该项目到IDE(如Eclipse或IntelliJ IDEA),运行并理解其工作原理。 5. **学习资源**: 学习更多关于Java...
- 客户端调用:使用JAX-WS的`Service`类和`Port`接口创建客户端代理,调用服务。 2. RESTful Web服务: REST是一种轻量级的架构风格,它基于HTTP协议,通过URL定位资源,使用HTTP方法(GET, POST, PUT, DELETE)...