`
gjs_ht
  • 浏览: 8710 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

2、基于soap消息的调用

 
阅读更多

上一节讲述了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 消息调用 Web Services SOAP(Simple Object Access Protocol)是一种简单的协议,用于在分布式环境中交换信息。它基于 XML 协议,包括四个部分:SOAP 封装、SOAP 编码规则、SOAP RPC 表示和 SOAP 绑定。...

    用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC).

    本文将深入探讨如何使用Java来实现基于SOAP的XML文档网络传输以及远程过程调用(RPC)。这是一项关键的技术,它允许不同系统间的无缝交互,即使这些系统采用不同的编程语言和平台。 SOAP是一种基于XML的协议,主要...

    webservice、soap等接口调用参考

    在标题和描述中提到的"webservice,soap调用",这是指使用SOAP协议来调用Web服务的过程。SOAP消息通常以HTTP或HTTPS作为传输协议,其结构主要由三个部分组成:Header、Body和Envelope。Header部分包含了关于消息处理...

    用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC)

    ### 用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC) #### SOAP简介 SOAP(Simple Object Access Protocol,简单对象访问协议)是一种基于XML的协议,用于计算机之间的消息传递与远程过程调用(RPC)。...

    java调用soap接口案例

    8. **最佳实践**:在实际应用中,为了提高代码的可读性和可维护性,建议封装SOAP调用到单独的服务类或方法中。此外,考虑使用Apache CXF、JAX-WS RI等成熟框架,它们提供了更高级别的抽象和便利的API,简化了SOAP...

    SOAP调用webservice例子

    总的来说,SOAP调用Web服务涉及到XML消息的构建、发送和解析,以及使用WSDL来定义和理解服务接口。尽管现在RESTful API更为流行,但在某些需要强类型检查、事务处理和互操作性的场景下,SOAP仍然是一个重要的选择。

    soap规范web service调用

    ### SOAP规范Web Service调用详解 #### 一、SOAP简介 **SOAP**(Simple Object Access Protocol)是一种...通过对SOAP的基本规范、消息结构、编码规则及绑定方式的理解,我们可以更好地设计和实现基于SOAP的服务接口。

    Soap方式调用WebService

    3. **SOAP调用流程** - **创建SOAP消息**:客户端根据服务的WSDL(Web Service Description Language)文档,构造符合SOAP规范的请求消息。 - **发送请求**:客户端通过HTTP协议将SOAP消息发送到服务端的指定URL。...

    C++、SOAP实现调用webservice接口,上传文件、日志

    总的来说,C++结合SOAP调用Web服务接口是一项复杂的任务,涉及到网络通信、XML处理和错误管理等多个方面。使用适当的库和工具,如GSOAP,可以简化这个过程。通过学习和实践,开发者可以创建出能够与各种Web服务交互...

    SOAP消息和WSDL

    **SOAP消息和WSDL详解** ...SOAP提供了标准的消息格式,使得跨平台、跨语言的交互成为可能,而WSDL则作为服务的蓝图,帮助开发者理解和调用Web服务。结合具体的编程实践,你可以更好地运用这些知识在实际项目中。

    java 调用soap

    在调用SOAP服务前,你需要一个WSDL文件,它定义了服务的接口、操作、消息格式和绑定信息。你可以通过WSDL URL获取此文件。 ### 3. 使用JAX-WS(Java API for XML Web Services) JAX-WS是Java平台上的标准API,用于...

    客户端调用webservice方式一(soap请求)

    1. **创建SOAP消息**:客户端首先需要构造一个SOAP消息,其中Body部分应包含调用Web Service的具体方法(如获取物流信息的函数)以及必要的参数(如订单号)。 2. **设置SOAP Envelope和Header**:根据WebService的...

    用java实现基于soap的xml文档网络传输及远程过程调用

    ### 使用Java实现基于SOAP的XML文档网络传输及远程过程调用 #### 1. SOAP简介与原理 SOAP(Simple Object Access Protocol,简单对象访问协议)是一种基于XML的标准协议,用于在分布式环境中进行消息交换和远程...

    用Java实现SOAP的XML文档网络传输及远程过程调用(RPC)

    为了实现基于SOAP的XML文档网络传输及远程过程调用(RPC),我们需要配置相应的开发环境。下面是一些必要的步骤: 1. **下载所需软件包**:需要下载以下四个软件包,这些软件包均是开源免费的。 - νSOAP:Apache...

    java+soap+webservice 调用模拟

    3. **Java中的SOAP调用**:在Java中,我们通常使用JAX-WS(Java API for XML Web Services)框架来处理SOAP通信。JAX-WS提供了多种工具,如wsimport,可以从WSDL文件生成客户端代理类。这些代理类提供了调用Web服务...

    用Soap调用webservice接口

    SOAP基于XML(Extensible Markup Language),它定义了一个消息结构,使得应用程序可以发送和接收结构化的数据。SOAP消息通常包含三个主要部分:Header、Body和Envelope。Header包含了与消息处理相关的元信息,Body...

    WCF同时支持AJAX和SOAP进行调用

    WCF允许在一个服务中同时支持AJAX和SOAP调用,这意味着开发者可以为不同的客户端提供不同的访问方式。例如,对于需要快速响应和无刷新操作的Web应用,可以选择AJAX;而对于需要高度安全性和互操作性的企业级应用,...

    Qt下实现WebServer的调用之qtsoap

    在Qt环境下,开发人员经常需要与各种网络服务进行交互,比如Web API或远程...通过理解并熟练运用qtsoap,你可以构建起与远程服务高效沟通的Qt应用,无论是数据同步、API调用还是其他基于SOAP的服务,都能得心应手。

    apache.soap...jar包,soap 调用webservice核心包

    Apache SOAP是Java平台上的一个开源库,用于构建和消费基于SOAP(Simple Object Access Protocol)的Web服务。SOAP是一种XML格式的协议,它允许应用程序通过HTTP或其他传输协议进行远程调用,实现了分布式计算的能力...

Global site tag (gtag.js) - Google Analytics