Web service一般就是用SOAP协议通过HTTP来调用它,其实他就是一个WSDL文档,客户都可以阅读WSDL文档来用这个Web service。客户根据WSDL描述文档,会生成一个SOAP请求消息。Web service都是放在Web服务器 (如IIS) 后面的,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到Web服务器来。Web服务器再把这些请求转发给Web service请求处理器。请求处理器的作用在于,解析收到的SOAP请求,调用Web service,然后再生成相应的SOAP应答。Web服务器得到SOAP应答后,会再通过HTTP应答的方式把它送回到客户端。
个人以为就把webservice当成是Http这种请求和响应方式就可以处理大部分问题了。
SOAP 使用 HTTP 传送 XML,尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 是一个广泛又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。但是如果效率对你来说很重要,那么你应该多考虑其它的方式,而不要用 SOAP。
1.使用HttpClient
用到的jar文件:commons-httpclient-3.1.jar
方法:
预先定义好Soap请求数据,可以借助于XMLSpy Professional软件来做这一步生成。
复制代码
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>" +
" <getCountryCityByIp xmlns=\"http://WebXml.com.cn/\">" +
" <theIpAddress>219.137.167.157</theIpAddress>" +
" </getCountryCityByIp>" +
" </soap12:Body>" +
"</soap12:Envelope>";
复制代码
然后定义一个PostMethod,这时需要指定web服务的Url;
PostMethod postMethod = new PostMethod(“http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx”);
然后把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();
statusCode = httpClient.executeMethod(postMethod);
String soapRequestData = postMethod.getResponseBodyAsString();
soapRequestData就是调用web服务的Soap响应数据,是xml格式的,可以通过解析soapRequestData来获得调用web服务的返回值。
2.使用Xfire
用到的jar文件xfire-all-1.2.4.jar, jdom-1.0.jar
方法:
定义一个Client对象,指定web服务的wsdl的地址
Client c = new Client(new URL(“http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl”));
调用Client对象的invoke方法,指定web服务的方法名,和参数,返回值是一个Object型的数组。
下面代码调用getVersionTime方法,这个方法没有参数用所以后一个参数使用new Object[0]。
Object[] results = c.invoke(“getVersionTime”, new Object[0]);
3.使用axis2
下载axis2-1.4
方法:
打开控制台,进入axis2-1.4/bin目录
wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl -p ws.clinet.axis2
上述命令执行完后,会在当前目录下生成一个src目录,在src\ ws\ clinet\ axis2目录里生成XXXXCallbackHandler.java和XXXXStub.java两个文件。
wsdl2java 会根据wsdl文件生成web服务的调用接口,参数类,返回值的类。
在调用webservice的时候直接实例化一个XXXXStub的对象,然后调用web服务的方法就可以了。
4. 总结
针对某种工具搭建的Web Service服务可能有与其对应的更简单的调用方法,在这里没有做描述,上述的调用web服务的方法是通用的。
上述三种方法中使用httpclient应该是比较灵活,但是开发效率低,难度大,使用Xfire和axis2比较容易,开发速度快,但是axis2通用性不好,有的web服务用axis2不好用。httpclient和Xfire通用性比较好,鉴于以上特点推荐使用Xfire。
以上一些部分转自http://www.cnblogs.com/sun_moon_earth/archive/2009/02/03/1383308.html
补充:同时还可以通过jws客户端方式访问
具体见http://haidaoqi3630.iteye.com/admin/blogs/2176493
分享到:
相关推荐
在PB 11.5中,有几种方法可以实现对Web服务的调用,以下将详细介绍这些方法。 1. **SOAP Toolkit**: PB 11.5包含了对SOAP(简单对象访问协议)的支持,通过使用SOAP Toolkit,开发者可以直接在PB中创建、调用和...
在C#中,可以通过以下几种方式调用WebService: 1. **使用WSDL生成代理类**: - 在客户端项目中,使用“添加服务引用”功能,通过提供WebService的WSDL地址(通常是`...
- AXIS1 的客户端调用支持字符串和实体类两种方式。当调用 AXIS2 发布的服务时,可能出现实体类属性为 null 的问题。 #### 六、小结 在选择 WebService 发布方式时,需要根据项目需求和技术背景来决定。CXF 以其...
而InvokeWebService帮助类则是一个专门为动态调用WebService设计的工具,它使得开发者无需预先知道服务的具体接口或者方法,只需要提供WebService的URL地址,就可以方便地访问并执行相应的服务操作。 在Java开发...
"Java 调用 Webservice 的几种方法总结" Java 调用 Webservice 的几种方法总结中,主要介绍了使用 JDK Web 服务 API、Axis 和 XFire 等方法来调用 Webservice。下面将对每种方法进行详细的介绍。 使用 JDK Web ...
如果仍然遇到问题,可以尝试以下几种方法: 1. **重新安装IIS Mapping**:使用`aspnet_regiis.exe –i`命令。 2. **重置ASP.NET密码**:修改`Machine.config`文件中的`<processModel>`节点的`userName`和`password`...
在这个“微信小程序访问webservice”的项目中,我们主要会涉及到以下几个关键知识点: 1. **微信小程序开发环境**:首先,你需要安装微信开发者工具,这是一个集成开发环境,提供调试、预览、发布等功能,是开发...
本篇文章将详细介绍Java中调用WebService的几种常见方法,并提供相应的源代码示例。 1. **SOAP(Simple Object Access Protocol)调用**: SOAP是WebService的主要通信协议,基于XML格式的数据交换。在Java中,...
接下来,我们转向CXF框架,它提供了一种更简洁、更强大的方式来处理Web服务。CXF不仅支持JAX-WS,还支持JAX-RS(Java API for RESTful Web Services)和WS-*规范。发布服务时,只需创建一个继承自`...
gsoap生成C++类和函数,这些类和函数可以直接在C++代码中调用来访问WebService。开发者需要先从WSDL文件生成gsoap的输入文件,然后使用gsoap工具生成C++客户端代码。调用过程主要包括解析SOAP消息,创建请求,发送...
而WebService则是一种基于XML的通信协议,允许不同系统之间的数据交换,不受平台限制。 首先,让我们理解WebService的基本概念。WebService是一种基于标准的分布式应用程序接口(API),它通过HTTP协议传输数据,...
总的来说,利用QtSoap访问WebService涉及创建SOAP消息、发送请求、解析响应和处理可能出现的错误。虽然这涉及到一些XML和网络编程的概念,但QtSoap库简化了这个过程,使Qt开发者能够轻松地集成Web Service功能到他们...
而WebService则是一种通过网络提供服务的方式,它可以跨越不同的平台和语言进行通信。MSSQL是微软提供的关系型数据库管理系统,广泛应用于存储和处理数据。 首先,让我们看下给定的代码片段,它是用MXML编写的,这...
创建Axis2 Web服务的POJO方式主要包括以下几个步骤: 1. **定义服务接口和服务实现**:首先,你需要创建一个Java接口,定义你的服务方法。接着,编写一个实现了这个接口的Java类,作为服务的具体实现。 2. **添加...
WebService是一种开放的标准服务,它提供了一个简单、标准化的方式供不同应用间进行交互。WebService通常使用HTTP作为传输协议,而数据格式则采用XML。 #### VC6.0调用WebService的步骤 为了在VC6.0中调用...
接下来,我们将探讨几种调用WebService的方式: 1. **SOAP协议调用**:使用SOAP协议调用WebService是最常见的方法。客户端通过发送一个SOAP消息到服务的URL来请求服务。可以使用Eclipse内置的Web Services Explorer...
Web服务(WebService)是一种基于互联网的、平台独立的交互方式,允许不同的系统之间进行数据交换和功能调用。在本项目中,通过运行名为"webservicTest"的主程序,我们可以对WebService进行测试。这个压缩包包含了三...