Httpclient远程调用WebService示例(Eclipse+httpclient)
package cn.com.taiji.pos.httpserver;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.protocol.Protocol;
public class test {
public static void main(String[] args) throws HttpException, IOException {
String soapRequestData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
soapRequestData+="<ARAMARK_REQUEST>";
soapRequestData+="<HEAD>";
soapRequestData+="<VERSION>1.0</VERSION>";
soapRequestData+="<PASSWORD>123456</PASSWORD>";
soapRequestData+="<REQUEST_CUS>OL</REQUEST_CUS>";
soapRequestData+="<REQUEST_TYPE>AC001</REQUEST_TYPE>";
soapRequestData+="<PROJECT_CODE>KXY001</PROJECT_CODE>";
soapRequestData+="<REQUEST_UNIQUE>c5ffb67449054b04af9fb052b4412e2a</REQUEST_UNIQUE>";
soapRequestData+="<REQUEST_CONDITION>";
soapRequestData+="<CUSTOMER_NO>100101</CUSTOMER_NO>";
soapRequestData+="<CUPASSWORD>123456</CUPASSWORD>";
soapRequestData+="</REQUEST_CONDITION>";
soapRequestData+="</HEAD>";
soapRequestData+="</ARAMARK_REQUEST>";
Protocol myhttps = new Protocol("https", new MySSLProtocolSocketFactory(), 443);
Protocol.registerProtocol("https", myhttps);
PostMethod postMethod = new PostMethod("http://10.0.46.15:8081/pos/servlet/httpServer.jsp");
postMethod.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
postMethod.setRequestHeader("Connection", "close");
// 然后把Soap请求数据添加到PostMethod中
ByteArrayRequestEntity re = new ByteArrayRequestEntity(soapRequestData.getBytes());
postMethod.setRequestEntity(re);
// 最后生成一个HttpClient对象,并发出postMethod请求
HttpClient httpClient = new HttpClient();
int statusCode = httpClient.executeMethod(postMethod);
if(statusCode == 200) {
System.err.println("调用成功!");
}
else {
System.err.println("调用失败!错误码:" + statusCode);
}
BufferedInputStream bis = new BufferedInputStream(postMethod.getResponseBodyAsStream());
ByteArrayOutputStream bop = new ByteArrayOutputStream();
int i = -1;
while ((i = bis.read()) != -1){
bop.write(i);
}
String result="";
result = bop.toString("utf-8");
postMethod.releaseConnection();
httpClient.getHttpConnectionManager().closeIdleConnections(0);
}
}
--------------------------------------参考:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/10/3072216.html
我们将Web Service发布在Tomcat或者其他应用服务器上后,有很多方法可以调用该Web Service,常用的有两种:
1、通过浏览器HTTP调用,返回规范的XML文件内容
2、通过客户端程序调用,返回结果可自定义格式
接下来,我利用Eclipse作为开发工具,演示一个Httpclient调用WebService的简单示例
第一种调用见我的另一篇博文:https://www.geek-share.com/detail/2579197700.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远程调用WebService示例(Eclipse+httpclient)
- Httpclient远程调用WebService示例(Eclipse+httpclient)
- Httpclient远程调用WebService示例(Eclipse+httpclient)
- Httpclient远程调用WebService示例(Eclipse+httpclient)
- Httpclient远程调用WebService示例(Eclipse+httpclient
- Httpclient远程调用WebService示例
- Eclipse根据wsdl文件自动生成webservice client图解,以及调用示例,附测试项目
- httpclient妙用一 httpclient作为客户端调用webservice
- AXIS2远程调用WebService示例(Eclipse+AXIS)
- AXIS2远程调用WebService示例(Eclipse+AXIS)
- 用axis在eclipse中new出webService client生成客户端,调用远程webservice接口的方法
- AXIS2远程调用WebService示例(Eclipse+AXIS)
- AXIS2远程调用WebService示例(Eclipse+AXIS)
- (六) WebService-- HttpClient 调用WS服务
- httpclient远程调用,返回xml
- 用eclipse调用远程webservice生成客户端代码
- HttpClient调用.net发布的带Windows NTML验证的webservice
- 远程调用之RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- AndroidHttpClient详解及调用示例