您的位置:首页 > 编程语言 > Java开发

Httpclient远程调用WebService示例(Eclipse+httpclient)

2017-03-29 15:03 459 查看

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格式的数据,这里数据未进行格式化显示和处理

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: