我们将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接口详解 #### 一、概述 在现代软件开发中,Web服务(尤其是WebService)作为实现系统间交互的一种重要手段被广泛采用。WebService提供了通过HTTP协议进行远程过程调用的能力,...
本工具类主要用于简化这个过程,确保开发者能够高效、可靠地调用WebService。下面我们将详细探讨Java调用WebService的相关知识点。 1. **WebService概念**: WebService是一种基于互联网的、平台无关的应用程序...
总结,.NET动态调用WebService涉及的关键技术包括SOAP协议的理解、选择合适的调用类(如SoapHttpClientProtocol或HttpClient)、数据序列化和反序列化、异常处理以及安全措施。了解并掌握这些知识点,将使你在开发中...
Java调用WebService工程是将Java应用程序与通过WebService接口提供的服务进行交互的过程。WebService是一种基于XML标准的、平台和语言无关的通信方式,它允许不同系统间的应用能够共享数据和服务。在Java中,我们...
本文将深入探讨在Java环境中调用WebService的五种主要方式:Axis、CXF、HttpClient、MyEclipse反向生成以及XFire。 1. Axis:Apache Axis是最早且广泛使用的SOAP库,用于创建和消费Web服务。使用Axis调用WebService...
C#中调用WebService接口是.NET开发中的一个重要环节,它允许.NET应用程序通过网络与远程服务器上的服务进行交互。文章《c# 三种方法调用WebService接口》介绍了在C#环境下通过三种不同的方法实现对WebService接口的...
本主题聚焦于如何利用C#调用WebService来查询手机号码的归属地。WebService是一种基于HTTP协议的网络服务,允许不同系统之间进行数据交换。在本案例中,我们将讨论如何构建或使用一个WebService接口来获取手机号码的...
Android调用Webservice主要依赖于HTTP协议,常见的库有HttpURLConnection、Apache HttpClient(已废弃)以及Volley、Retrofit等现代网络库。但针对SOAP协议,我们通常会使用`ksoap2`库,因为它对SOAP消息处理更为...
动态调用WebService服务是C#中的一个关键技能,它允许程序员在运行时与远程Web服务进行交互,而无需预先知道服务的具体接口或方法。本文将深入探讨如何在C#中实现这一功能,并提供相关知识点。 首先,理解...
在Java中,调用WebService接口通常涉及以下关键技术: 1. **WSDL(Web Service Description Language)**:定义了WebService接口的服务规范,包括服务的位置、操作、消息格式等信息。开发者可以通过WSDL文件来了解...
Java调用Web服务(Web Service)是开发过程中常见的任务,主要涉及如何与远程服务进行交互。Web服务通常基于SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)架构,而Java提供了...
在WPF应用程序中,异步调用Web API是一项重要的技术,因为它可以避免UI线程阻塞,从而提高用户...通过利用HttpClient的异步方法,结合WPF的数据绑定机制,可以在保持界面流畅的同时,实现对远程数据的异步读取和显示。
Java调用WebService应用是软件开发中的常见任务,它允许Java应用程序与远程的Web服务进行交互,从而实现数据交换和服务的集成。在这个主题中,我们将深入探讨如何在Java环境中使用不同的库和技术来调用WebService。 ...
当我们需要与第三方平台进行数据交换时,Webservice作为一个标准的远程调用技术,常常被用来实现不同系统间的通信。在这个场景下,"C#调用webservice"是一个重要的技能点。 在描述中提到,你面临的情况是公司只提供...
Java调用WebService是一种常见的软件集成方式,特别是在分布式系统和跨平台通信中。在Java中,通过使用各种库和API,可以方便地与基于SOAP(Simple Object Access Protocol)或REST(Representational State ...
在Android开发中,调用Web Service来实现手机归属地查询是一项常见的需求,这通常涉及到网络通信、XML或JSON解析以及Web服务接口的调用。在这个过程中,开发者需要掌握以下关键知识点: 1. **Web Service**: Web ...
在调用Webservice时,通常会使用这些API来构建HTTP请求并解析返回的XML或JSON数据。 3. **Ksoap2库**:Ksoap2是一个轻量级的Android库,专门用于调用SOAP Web Services。在本实例中,我们将使用Ksoap2来与天气预报...
首先,理解SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息,特别适合于服务接口的远程调用。 Java访问.Net Webservice的过程大致分为以下步骤: 1. **创建SOAP请求**:首先,我们需要构建一个...
【C#.NET动态调用WebService的三种方式】 在C#.NET开发中,当我们需要与远程Web服务进行交互时,通常会使用“添加Web引用”或“添加服务引用”功能自动生成客户端代理类。然而,有些场景下,我们可能需要在程序运行...
Web方法通常会使用.NET的`System.Net.WebClient`类或者`HttpClient`类来发起HTTP请求,获取JSON或XML格式的响应数据。然后,我们需要解析返回的数据,可以使用`System.Xml`库(对于XML)或`System.Json`(对于.NET ...