上一节讲述了webservice的发布,本节说明一下基于SOAP消息的调用实现细节,按顺序先后
1、创建要访问的ws服务对象
URL endpointURL = new URL("http://localhost:8889/ms?wsdl");//访问的URL //QName的第一参数是targetNamespace,第二个是name QName qName= new QName("http://service.soap.org/","MyServiceImplService"); //创建远程服务访问对象 Service service = Service.create(endpointURL, qName);
2、创建消息转发器
//基于消息的方式,因此,后两个参数是SOAPMessage.class, Service.Mode.MESSAGE,第一个参数是要访问的那个服务port的name Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName("http://service.soap.org/","MyServiceImplPort")/*一定要加上命名空间,否则出错*/, SOAPMessage.class, Service.Mode.MESSAGE);
3、组建要转发的请求
也就是你要访问那个方法,就组装那个方法的请求(参数),封装到SOAP消息中
SOAPMessage message = MessageFactory.newInstance().createMessage();//创建消息对象,用于获取信封对象 //获取body SOAPBody body = message.getSOAPPart().getEnvelope().getBody(); //指定具体访问那个方法 QName method = new QName("http://service.soap.org/","addUser","tt");//访问的方法 SOAPElement bodyElement = body.addBodyElement(method); //父元素写了namespace,子元素就不用写了,namespace具有继承性 SOAPElement user = bodyElement.addChildElement("user");//创建元素,然后添加调用方法的参数内容 user.addChildElement("id").setValue("12"); user.addChildElement("nickname").setValue("tudou123"); user.addChildElement("password").setValue("123123"); user.addChildElement("username").setValue("xxx");
需要说明的是SOAPMessage的是用方法,下面内容是jdk文档中的描述
所有 SOAP 消息的根类。因为 SOAP 消息是通过“导线”传输的,所以它是 XML 文档或第一个正文部分为 XML/SOAP 文档的 MIME 消息。 SOAPMessage 对象由一个 SOAP 部分和一个或多个附件部分(可选)组成。SOAPMessage 对象的 SOAP 部分是一个 SOAPPart 对象,包含了用于消息路由和标识的信息,并可以包含特定于应用程序的内容。消息 SOAP 部分中的所有数据都必须是 XML 格式。 默认情况下,新的 SOAPMessage 对象包含以下对象: 一个 SOAPPart 对象 一个 SOAPEnvelope 对象 一个 SOAPBody 对象 一个 SOAPHeader 对象 可以通过调用方法 SOAPMessage.getSOAPPart() 检索消息的 SOAP 部分。SOAPEnvelope 对象是从 SOAPPart 对象检索的,SOAPEnvelope 对象用于检索 SOAPBody 和 SOAPHeader 对象。 SOAPPart sp = message.getSOAPPart(); SOAPEnvelope se = sp.getEnvelope(); SOAPBody sb = se.getBody(); SOAPHeader sh = se.getHeader(); 除强制性 SOAPPart 对象之外,SOAPMessage 对象还可以包含零个或多个 AttachmentPart 对象,每个 AttachmentPart 对象都包含特定于应用程序的数据。SOAPMessage 接口提供了一些用于创建 AttachmentPart 对象的方法,以及一些将它们添加到 SOAPMessage 对象的方法。收到 SOAPMessage 对象的一方可以通过检索各个附件部分来检查消息内容。 与 SOAP 消息的其余部分不同,附件不需要是 XML 格式,因此可以是简单文本或图像文件等任何形式。因此,任何非 XML 格式的消息内容必须在 AttachmentPart 对象中。 MessageFactory 对象可以创建行为特定于具体 SAAJ 实现或应用程序的 SOAPMessage 对象。例如,MessageFactory 对象可以生成符合特定配置文件(如 ebXML)的 SOAPMessage 对象。在这种情况下,MessageFactory 对象可以生成使用 ebXML 头初始化的 SOAPMessage 对象。
4、第3步组装了消息,这里就需要将消息转发给webservice的提供者,并获取响应
SOAPMessage response = dispatch.invoke(message);
很简单,只有一条语句,我们看看返回的内容:
//将结果打印出来 response.writeTo(System.out);
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header/><S:Body><ns2:addUserResponse xmlns:ns2="http://service.soap.org/"><user><id>12</id><nickname>tudou123</nickname><password>123123</password><username>xxx</username></user></ns2:addUserResponse></S:Body></S:Envelope>
这样,就获取了数据,解析出对象即可。
5、附件(是对应的wsdl文件)
This XML file does not appear to have any style information associated with it. The document tree is shown below. <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --> <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --> <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.soap.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://service.soap.org/" name="MyServiceImplService"> <types> <xsd:schema> <xsd:import namespace="http://service.soap.org/" schemaLocation="http://localhost:8889/testService?xsd=1"/> </xsd:schema> </types> <message name="addUser"> <part name="parameters" element="tns:addUser"/> </message> <message name="addUserResponse"> <part name="parameters" element="tns:addUserResponse"/> </message> <message name="add"> <part name="parameters" element="tns:add"/> </message> <message name="addResponse"> <part name="parameters" element="tns:addResponse"/> </message> <portType name="IMyService"> <operation name="addUser"> <input message="tns:addUser"/> <output message="tns:addUserResponse"/> </operation> <operation name="add"> <input message="tns:add"/> <output message="tns:addResponse"/> </operation> </portType> <binding name="MyServiceImplPortBinding" type="tns:IMyService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="addUser"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> <operation name="add"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="MyServiceImplService"> <port name="MyServiceImplPort" binding="tns:MyServiceImplPortBinding"> <soap:address location="http://localhost:8889/testService"/> </port> </service> </definitions>
相关推荐
使用 Soap 消息调用 Web Services SOAP(Simple Object Access Protocol)是一种简单的协议,用于在分布式环境中交换信息。它基于 XML 协议,包括四个部分:SOAP 封装、SOAP 编码规则、SOAP RPC 表示和 SOAP 绑定。...
本文将深入探讨如何使用Java来实现基于SOAP的XML文档网络传输以及远程过程调用(RPC)。这是一项关键的技术,它允许不同系统间的无缝交互,即使这些系统采用不同的编程语言和平台。 SOAP是一种基于XML的协议,主要...
在标题和描述中提到的"webservice,soap调用",这是指使用SOAP协议来调用Web服务的过程。SOAP消息通常以HTTP或HTTPS作为传输协议,其结构主要由三个部分组成:Header、Body和Envelope。Header部分包含了关于消息处理...
### 用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC) #### SOAP简介 SOAP(Simple Object Access Protocol,简单对象访问协议)是一种基于XML的协议,用于计算机之间的消息传递与远程过程调用(RPC)。...
8. **最佳实践**:在实际应用中,为了提高代码的可读性和可维护性,建议封装SOAP调用到单独的服务类或方法中。此外,考虑使用Apache CXF、JAX-WS RI等成熟框架,它们提供了更高级别的抽象和便利的API,简化了SOAP...
总的来说,SOAP调用Web服务涉及到XML消息的构建、发送和解析,以及使用WSDL来定义和理解服务接口。尽管现在RESTful API更为流行,但在某些需要强类型检查、事务处理和互操作性的场景下,SOAP仍然是一个重要的选择。
### SOAP规范Web Service调用详解 #### 一、SOAP简介 **SOAP**(Simple Object Access Protocol)是一种...通过对SOAP的基本规范、消息结构、编码规则及绑定方式的理解,我们可以更好地设计和实现基于SOAP的服务接口。
3. **SOAP调用流程** - **创建SOAP消息**:客户端根据服务的WSDL(Web Service Description Language)文档,构造符合SOAP规范的请求消息。 - **发送请求**:客户端通过HTTP协议将SOAP消息发送到服务端的指定URL。...
总的来说,C++结合SOAP调用Web服务接口是一项复杂的任务,涉及到网络通信、XML处理和错误管理等多个方面。使用适当的库和工具,如GSOAP,可以简化这个过程。通过学习和实践,开发者可以创建出能够与各种Web服务交互...
**SOAP消息和WSDL详解** ...SOAP提供了标准的消息格式,使得跨平台、跨语言的交互成为可能,而WSDL则作为服务的蓝图,帮助开发者理解和调用Web服务。结合具体的编程实践,你可以更好地运用这些知识在实际项目中。
在调用SOAP服务前,你需要一个WSDL文件,它定义了服务的接口、操作、消息格式和绑定信息。你可以通过WSDL URL获取此文件。 ### 3. 使用JAX-WS(Java API for XML Web Services) JAX-WS是Java平台上的标准API,用于...
1. **创建SOAP消息**:客户端首先需要构造一个SOAP消息,其中Body部分应包含调用Web Service的具体方法(如获取物流信息的函数)以及必要的参数(如订单号)。 2. **设置SOAP Envelope和Header**:根据WebService的...
### 使用Java实现基于SOAP的XML文档网络传输及远程过程调用 #### 1. SOAP简介与原理 SOAP(Simple Object Access Protocol,简单对象访问协议)是一种基于XML的标准协议,用于在分布式环境中进行消息交换和远程...
为了实现基于SOAP的XML文档网络传输及远程过程调用(RPC),我们需要配置相应的开发环境。下面是一些必要的步骤: 1. **下载所需软件包**:需要下载以下四个软件包,这些软件包均是开源免费的。 - νSOAP:Apache...
3. **Java中的SOAP调用**:在Java中,我们通常使用JAX-WS(Java API for XML Web Services)框架来处理SOAP通信。JAX-WS提供了多种工具,如wsimport,可以从WSDL文件生成客户端代理类。这些代理类提供了调用Web服务...
SOAP基于XML(Extensible Markup Language),它定义了一个消息结构,使得应用程序可以发送和接收结构化的数据。SOAP消息通常包含三个主要部分:Header、Body和Envelope。Header包含了与消息处理相关的元信息,Body...
WCF允许在一个服务中同时支持AJAX和SOAP调用,这意味着开发者可以为不同的客户端提供不同的访问方式。例如,对于需要快速响应和无刷新操作的Web应用,可以选择AJAX;而对于需要高度安全性和互操作性的企业级应用,...
在Qt环境下,开发人员经常需要与各种网络服务进行交互,比如Web API或远程...通过理解并熟练运用qtsoap,你可以构建起与远程服务高效沟通的Qt应用,无论是数据同步、API调用还是其他基于SOAP的服务,都能得心应手。
Apache SOAP是Java平台上的一个开源库,用于构建和消费基于SOAP(Simple Object Access Protocol)的Web服务。SOAP是一种XML格式的协议,它允许应用程序通过HTTP或其他传输协议进行远程调用,实现了分布式计算的能力...