`

httpClient远程调用webService

阅读更多

 我们将Web Service发布在Tomcat或者其他应用服务器上后,有很多方法可以调用该Web Service,常用的有两种:
 1、通过浏览器HTTP调用,返回规范的XML文件内容       2、通过客户端程序调用,返回结果可自定义格式
 
      接下来,我利用Eclipse作为开发工具,演示一个Httpclient调用WebService的简单示例
步骤如下: 
准备工作:用到的jar包有: 下载链接
http://download.csdn.net/detail/lanxuezaipiao/5354480
 
第一步:新建Java Project,项目名称为HttpCallWebService 第二步:将所需jar包导入到库中 第三步:编写调用class,这里有两种方式调用,即GET方式和POST方式,由于POST方式较安全,故这里采用POST方式调用;请求数据的构造也有两种方式:静态和动态构造,下面分别介绍这两种方式:
注:这里以E邮宝开放的webservice接口为例调用其中一个API函数,而E邮宝的webservice基于SOAP,故请求数据为SOAP格式,大家可根据自己情况进行修改。
静态构造请求数据:
package com.http; 
import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.InputStream; 
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity; 
public class StaticHttpclientCall { 
    /**
     * @param args
     * @throws IOException      * @throws HttpException      */
    public static void main(String[] args) throws HttpException, IOException {        
// TODO Auto-generated method stub
        String soapRequestData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"      

           + "<soap12:Envelope  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""              

           + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""                

           + " xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">"              

           + " <soap12:Body>"              

           + " <GetAPACShippingPackage xmlns=\"http://shippingapi.ebay.cn/\">"               

           + " <GetAPACShippingPackageRequest>"                

           + " <TrackCode>123</TrackCode>"                

           + " <Version>123</Version>"                 

           + " <APIDevUserID>123</APIDevUserID>"                

           + " <APIPassword>123</APIPassword>"                 

           + " <APISellerUserID>123</APISellerUserID>"                

           + " <MessageID>123</MessageID>"                 

           + " </GetAPACShippingPackageRequest>"                 

           + " </GetAPACShippingPackage>" + "</soap12:Body>"                

           + " </soap12:Envelope>";          

System.out.println(soapRequestData);          

PostMethod postMethod = new PostMethod("http://epacketws.pushauction.net/v3/orderservice.asmx?wsdl");          

// 然后把Soap请求数据添加到PostMethod中        

byte[] b = soapRequestData.getBytes("utf-8");         

InputStream is = new ByteArrayInputStream(b, 0, b.length);        

RequestEntity re = new InputStreamRequestEntity(is, b.length,"application/soap+xml; charset=utf-8");         postMethod.setRequestEntity(re);         

// 最后生成一个HttpClient对象,并发出postMethod请求        

HttpClient httpClient = new HttpClient();         

int statusCode = httpClient.executeMethod(postMethod);        

if(statusCode == 200) {             

System.out.println("调用成功!");             

String soapResponseData = postMethod.getResponseBodyAsString();            

System.out.println(soapResponseData);        

}        else {             

System.out.println("调用失败!错误码:" + statusCode);        

}    

}

 动态构造数据:
package com.http;
import java.io.ByteArrayInputStream;

import java.io.InputStream;

import java.util.HashMap;

import java.util.Map;

import java.util.Set; 
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;

import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; 
// 动态构造调用串,灵活性更大

 public class DynamicHttpclientCall {  
    private String namespace;    

    private String methodName;    

    private String wsdlLocation;
    private String soapResponseData; 
    public DynamicHttpclientCall(String namespace, String methodName,String wsdlLocation) { 
        this.namespace = namespace;
        this.methodName = methodName;        

        this.wsdlLocation = wsdlLocation;    

   } 
    private int invoke(Map<String, String> patameterMap) throws Exception {        

        PostMethod postMethod = new PostMethod(wsdlLocation);        

        String soapRequestData = buildRequestData(patameterMap); 
        byte[] bytes = soapRequestData.getBytes("utf-8");
        InputStream inputStream = new ByteArrayInputStream(bytes, 0, bytes.length);
        RequestEntity requestEntity = new InputStreamRequestEntity(inputStream, bytes.length,"application/soap+xml; charset=utf-8");        

         postMethod.setRequestEntity(requestEntity); 
        HttpClient httpClient = new HttpClient();
        int statusCode = httpClient.executeMethod(postMethod);
        soapResponseData = postMethod.getResponseBodyAsString(); 
        return statusCode;
    }      

private String buildRequestData(Map<String, String> patameterMap) {        

StringBuffer soapRequestData = new StringBuffer();         

soapRequestData.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");        

soapRequestData.append(

"<soap12:Envelope  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""                         

+ " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""                        

+ "  xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">");        

soapRequestData.append("<soap12:Body>");         

soapRequestData.append(

"<" + methodName + " xmlns=\"" + namespace+ "\">");         

soapRequestData.append("<" + methodName + "Request>");          

Set<String> nameSet = patameterMap.keySet();        

for (String name : nameSet) {             

soapRequestData.append(

"<" + name + ">" + patameterMap.get(name)+ "</" + name + ">");        

}                  

soapRequestData.append("</" + methodName + "Request>");        

soapRequestData.append("</" + methodName + ">");        

soapRequestData.append("</soap12:Body>");        

soapRequestData.append("</soap12:Envelope>");          

return soapRequestData.toString();     }      

/**       * @param args       * @throws Exception      */     

public static void main(String[] args) throws Exception {        

// TODO Auto-generated method stub          

DynamicHttpclientCall dynamicHttpclientCall = new DynamicHttpclientCall(                 "http://shippingapi.ebay.cn/", "GetAPACShippingPackage",                  "http://epacketws.pushauction.net/v3/orderservice.asmx?wsdl");          

Map<String, String> patameterMap = new HashMap<String, String>();          

patameterMap.put("TrackCode", "123");
patameterMap.put("Version", "123");         

patameterMap.put("APIDevUserID", "123");        

patameterMap.put("APIPassword", "123");        

patameterMap.put("APISellerUserID", "123");        

patameterMap.put("MessageID", "123");        

patameterMap.put("TrackCode", "123");         

String soapRequestData = dynamicHttpclientCall.buildRequestData(patameterMap);         System.out.println(soapRequestData);         

int statusCode = dynamicHttpclientCall.invoke(patameterMap);        

if(statusCode == 200) {             

System.out.println("调用成功!");             

System.out.println(dynamicHttpclientCall.soapResponseData);        

}  else {             

System.out.println("调用失败!错误码:" + statusCode);        

}             

}
}
 最终运行结果:
 可见最终返回的也是xml格式的数据,这里数据未进行格式化显示和处理

分享到:
评论

相关推荐

    httpClient调用webservice接口

    ### 使用HttpClient调用WebService接口详解 #### 一、概述 在现代软件开发中,Web服务(尤其是WebService)作为实现系统间交互的一种重要手段被广泛采用。WebService提供了通过HTTP协议进行远程过程调用的能力,...

    java 调用 webService工具类

    本工具类主要用于简化这个过程,确保开发者能够高效、可靠地调用WebService。下面我们将详细探讨Java调用WebService的相关知识点。 1. **WebService概念**: WebService是一种基于互联网的、平台无关的应用程序...

    .Net动态调用WebService

    总结,.NET动态调用WebService涉及的关键技术包括SOAP协议的理解、选择合适的调用类(如SoapHttpClientProtocol或HttpClient)、数据序列化和反序列化、异常处理以及安全措施。了解并掌握这些知识点,将使你在开发中...

    java调用webservice工程

    Java调用WebService工程是将Java应用程序与通过WebService接口提供的服务进行交互的过程。WebService是一种基于XML标准的、平台和语言无关的通信方式,它允许不同系统间的应用能够共享数据和服务。在Java中,我们...

    WebService调用的几种方式

    本文将深入探讨在Java环境中调用WebService的五种主要方式:Axis、CXF、HttpClient、MyEclipse反向生成以及XFire。 1. Axis:Apache Axis是最早且广泛使用的SOAP库,用于创建和消费Web服务。使用Axis调用WebService...

    c# 三种方法调用WebService接口

    C#中调用WebService接口是.NET开发中的一个重要环节,它允许.NET应用程序通过网络与远程服务器上的服务进行交互。文章《c# 三种方法调用WebService接口》介绍了在C#环境下通过三种不同的方法实现对WebService接口的...

    C# 调用WebService查询手机号码归属地

    本主题聚焦于如何利用C#调用WebService来查询手机号码的归属地。WebService是一种基于HTTP协议的网络服务,允许不同系统之间进行数据交换。在本案例中,我们将讨论如何构建或使用一个WebService接口来获取手机号码的...

    android 调用 Webservice源码

    Android调用Webservice主要依赖于HTTP协议,常见的库有HttpURLConnection、Apache HttpClient(已废弃)以及Volley、Retrofit等现代网络库。但针对SOAP协议,我们通常会使用`ksoap2`库,因为它对SOAP消息处理更为...

    C# 动态调用WebService服务

    动态调用WebService服务是C#中的一个关键技能,它允许程序员在运行时与远程Web服务进行交互,而无需预先知道服务的具体接口或方法。本文将深入探讨如何在C#中实现这一功能,并提供相关知识点。 首先,理解...

    webservice接口调用工具类依赖jar包

    在Java中,调用WebService接口通常涉及以下关键技术: 1. **WSDL(Web Service Description Language)**:定义了WebService接口的服务规范,包括服务的位置、操作、消息格式等信息。开发者可以通过WSDL文件来了解...

    java调用webservice的各种方法总结

    Java调用Web服务(Web Service)是开发过程中常见的任务,主要涉及如何与远程服务进行交互。Web服务通常基于SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)架构,而Java提供了...

    如何在WPF应用程序中通过HttpClient调用Web API

    在WPF应用程序中,异步调用Web API是一项重要的技术,因为它可以避免UI线程阻塞,从而提高用户...通过利用HttpClient的异步方法,结合WPF的数据绑定机制,可以在保持界面流畅的同时,实现对远程数据的异步读取和显示。

    Java调用webService应用.zip

    Java调用WebService应用是软件开发中的常见任务,它允许Java应用程序与远程的Web服务进行交互,从而实现数据交换和服务的集成。在这个主题中,我们将深入探讨如何在Java环境中使用不同的库和技术来调用WebService。 ...

    C#调用webservice

    当我们需要与第三方平台进行数据交换时,Webservice作为一个标准的远程调用技术,常常被用来实现不同系统间的通信。在这个场景下,"C#调用webservice"是一个重要的技能点。 在描述中提到,你面临的情况是公司只提供...

    java调用webservice包

    Java调用WebService是一种常见的软件集成方式,特别是在分布式系统和跨平台通信中。在Java中,通过使用各种库和API,可以方便地与基于SOAP(Simple Object Access Protocol)或REST(Representational State ...

    android调用webservice实现手机归属查询

    在Android开发中,调用Web Service来实现手机归属地查询是一项常见的需求,这通常涉及到网络通信、XML或JSON解析以及Web服务接口的调用。在这个过程中,开发者需要掌握以下关键知识点: 1. **Web Service**: Web ...

    Android之Webservice详解与调用天气预报Webservice完整实例

    在调用Webservice时,通常会使用这些API来构建HTTP请求并解析返回的XML或JSON数据。 3. **Ksoap2库**:Ksoap2是一个轻量级的Android库,专门用于调用SOAP Web Services。在本实例中,我们将使用Ksoap2来与天气预报...

    Java访问.Net Webservice 通过httpclient SOAP实现

    首先,理解SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息,特别适合于服务接口的远程调用。 Java访问.Net Webservice的过程大致分为以下步骤: 1. **创建SOAP请求**:首先,我们需要构建一个...

    C#.NET动态调用webservice的三种方式.pdf

    【C#.NET动态调用WebService的三种方式】 在C#.NET开发中,当我们需要与远程Web服务进行交互时,通常会使用“添加Web引用”或“添加服务引用”功能自动生成客户端代理类。然而,有些场景下,我们可能需要在程序运行...

    asp.net2.0 调用websevice 实现天气预报

    Web方法通常会使用.NET的`System.Net.WebClient`类或者`HttpClient`类来发起HTTP请求,获取JSON或XML格式的响应数据。然后,我们需要解析返回的数据,可以使用`System.Xml`库(对于XML)或`System.Json`(对于.NET ...

Global site tag (gtag.js) - Google Analytics