如何使用用于 XML 消息传递的 Java API(Java API for XML Messaging (JAXM))简化创建和发送 SOAP 消息的过程。
Web 服务的基础在于以标准格式发送和接收消息以便使所有系统都能理解。通常,那种格式是简单对象访问协议(Simple Object Access Protocol (SOAP))。SOAP 消息可以手工生成和发送,但是用于 XML 消息传递的 Java API(JAXM)使许多必需步骤(如创建连接或创建并发送实际消息)自动化。
这个过程包含五个步骤:
创建 SOAP 连接
创建 SOAP 消息
填充消息
发送消息
检索应答
一个基本的 SOAP 消息由包含两个主要部分(报头和主体)的封套组成。应用程序决定如何使用这些部分,但整个消息必须遵循特定的XML 结构(soap.msg文件
):
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ns1:SayHello xmlns:ns1="http://boomga.com">
</ns1:SayHello>
</soap:Body>
</soap:Envelope>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ns1:SayHello xmlns:ns1="http://boomga.com">
</ns1:SayHello>
</soap:Body>
</soap:Envelope>
请注意这个消息的结构。Envelope 包含Body 元素,而二者全都是 http://schemas.xmlsoap.org/soap/envelope/ 名称空间的一部分。整个消息将通过一个 SOAP 连接发送到一个 Web 服务中。
public static void doSoapPost()
{
try
{
//First create the connection
SOAPConnectionFactory soapConnFactory =
SOAPConnectionFactory.newInstance();
SOAPConnection connection =
soapConnFactory.createConnection();
//Next, create the actual message
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage message = messageFactory.createMessage();
//Create objects for the message parts
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPBody body = envelope.getBody();
//Populate the Message
StreamSource preppedMsgSrc = new StreamSource(
new FileInputStream("E:\\soap.msg"));
soapPart.setContent(preppedMsgSrc);
//Save the message
message.saveChanges();
//Check the input
System.out.println("\nREQUEST:\n");
message.writeTo(System.out);
System.out.println();
//Send the message and get a reply
//Set the destination
String destination =
"http://localhost:8000/HelloWorld/services/HelloWorldService";
//Send the message
SOAPMessage reply = connection.call(message, destination);
// Check the output
System.out.println("\nRESPONSE:\n");
//Create the transformer
TransformerFactory transformerFactory =
TransformerFactory.newInstance();
Transformer transformer =
transformerFactory.newTransformer();
//Extract the content of the reply
Source sourceContent = reply.getSOAPPart().getContent();
//Set the output for the transformation
StreamResult result = new StreamResult(System.out);
transformer.transform(sourceContent, result);
System.out.println();
//Close the connection
connection.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
{
try
{
//First create the connection
SOAPConnectionFactory soapConnFactory =
SOAPConnectionFactory.newInstance();
SOAPConnection connection =
soapConnFactory.createConnection();
//Next, create the actual message
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage message = messageFactory.createMessage();
//Create objects for the message parts
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPBody body = envelope.getBody();
//Populate the Message
StreamSource preppedMsgSrc = new StreamSource(
new FileInputStream("E:\\soap.msg"));
soapPart.setContent(preppedMsgSrc);
//Save the message
message.saveChanges();
//Check the input
System.out.println("\nREQUEST:\n");
message.writeTo(System.out);
System.out.println();
//Send the message and get a reply
//Set the destination
String destination =
"http://localhost:8000/HelloWorld/services/HelloWorldService";
//Send the message
SOAPMessage reply = connection.call(message, destination);
// Check the output
System.out.println("\nRESPONSE:\n");
//Create the transformer
TransformerFactory transformerFactory =
TransformerFactory.newInstance();
Transformer transformer =
transformerFactory.newTransformer();
//Extract the content of the reply
Source sourceContent = reply.getSOAPPart().getContent();
//Set the output for the transformation
StreamResult result = new StreamResult(System.out);
transformer.transform(sourceContent, result);
System.out.println();
//Close the connection
connection.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
运行结果:
REQUEST:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ns1:SayHello xmlns:ns1="http://boomga.com">
</ns1:SayHello>
</soap:Body>
</soap:Envelope>
RESPONSE:
<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><ns1:SayHelloResponse xmlns:ns1="http://boomga.com"><ns1:out>dyk,Hell0</ns1:out></ns1:SayHelloResponse></soap:Body></soap:Envelope>
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ns1:SayHello xmlns:ns1="http://boomga.com">
</ns1:SayHello>
</soap:Body>
</soap:Envelope>
RESPONSE:
<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><ns1:SayHelloResponse xmlns:ns1="http://boomga.com"><ns1:out>dyk,Hell0</ns1:out></ns1:SayHelloResponse></soap:Body></soap:Envelope>
相关推荐
使用 Soap 消息调用 Web Services SOAP(Simple Object Access Protocol)是一种简单的协议,用于在分布式环境中交换信息。它基于 XML 协议,包括四个部分:SOAP 封装、SOAP 编码规则、SOAP RPC 表示和 SOAP 绑定。...
通过本文的探讨,我们不仅了解了在C#中动态调用WebServices的必要性和优势,还深入剖析了其实现的技术细节,包括CodeDom、WebClient、反射机制以及对XML/SOAP协议的基本理解。掌握了这些知识后,开发者将能够在更加...
在Java世界中,调用Web服务通常使用JAX-WS(Java API for XML Web Services)或者Apache Axis库。以下是基本流程: 1. **生成Stub类**:使用wsimport工具或Axis的wsdl2java命令,从WSDL文件生成服务的Stub类。 2. ...
本文将深入探讨如何使用Ajax调用Web服务(Webservices),以实现客户端与服务器端的异步通信。 一、Ajax基础 Ajax的核心是JavaScript对象XMLHttpRequest,它提供了与服务器进行交互的能力。通过创建XMLHttpRequest...
标题“vc调用Webservices”指的是使用VC++编程语言来与Web服务进行交互。在Windows环境中,这通常涉及使用MSXML库或ATL(Active Template Library)来构建SOAP请求,并发送到Web服务的URL,然后解析返回的SOAP响应。...
通常,这涉及到在Web.config文件中配置服务,将自定义的SOAP Extension类添加到`<webServices>`元素的`soapExtensionTypes`子元素中,并指定适当的`type`和`priority`。 在深入研究源码之前,建议先熟悉.NET Web ...
在C++中调用Web服务通常涉及使用SOAP(简单对象访问协议),这是一个轻量级的协议,用于交换结构化和类型化的信息。 在这个项目中,我们有以下几个关键文件: 1. **ButterflyWEB.cpp** 和 **ButterflyWEB.h**:这...
总结,C#调用Web服务涉及了SOAP通信、WSDL导入、代理类生成、服务调用、异常处理、异步操作以及安全性等多个方面。理解并掌握这些知识点,将有助于开发出健壮且高效的Web服务客户端应用。在实际开发中,还需要根据...
开发者可以使用WSDL文档来描述SOAP消息的结构和调用方式,使得其他系统能够发现并理解如何与该服务交互。 3. **UDDI(Universal Description, Discovery, and Integration)**:UDDI是一种标准的目录服务,用于发布...
在PB中调用WebServices,通常需要使用PowerBuilder的.NET DataWindow或者WebService对象。.NET DataWindow对象可以用来访问.NET Framework中的WebServices,而WebService对象则适用于WSDL(Web Services Description...
在调用Web服务时,Delphi开发者需要构建符合SOAP规范的XML消息。 在Delphi中,可以使用 Indy 或 WinHTTP 组件库来实现HTTP POST请求。这里以Indy为例,其TIdHTTP组件提供了一种简单的方式来发送HTTP请求。首先,...
`Qtsoap`就是一种用于在Qt应用程序中实现SOAP(简单对象访问协议)通信的工具,它使得Qt应用能够轻松地调用WebServer上的服务。本文将深入探讨如何使用qtsoap在Qt下实现WebServer的调用。 首先,`qtsoap`是基于Qt...
本文将详细介绍如何使用Java来调用WebServices,并通过具体的例子进行说明。 #### 二、基础知识 1. **WebServices简介**: - WebServices是一种跨平台的服务,用于在分布式环境中提供功能。 - 它们通常基于XML、...
SOAP(Simple Object Access Protocol)是Web Services中最常用的通信协议,它定义了消息结构和传输方式。 在这个实例中,我们可能会使用到SOAP请求来获取天气预报信息。SOAP消息通常包含三个主要部分:Envelope、...
参考代码.txt文件可能包含了一些示例代码,演示如何使用SOAP调用Web服务,特别是积分接口。通常,这会涉及到创建SOAP请求消息,设置必要的Header和Body信息,然后发送请求并解析返回的SOAP响应。在Java中,可能使用...
### 用Java调用WebServices的三种方式 随着互联网技术的发展与成熟,WebServices作为一种标准的、跨平台的、基于XML的信息交换模式被广泛应用。在Java领域,调用WebServices通常涉及遵循一定的技术规范和标准。本文...
在Java中,可以使用JAX-WS(Java API for XML Web Services)库来创建和消费SOAP服务。 2. **EWS Managed API**: 微软提供了.NET框架下的EWS Managed API,但Java开发者通常会依赖第三方库,如Apache CXF或JAXB,来...
在Java中调用.NET Web Services主要依赖于SOAP(简单对象访问协议)和WSDL(Web服务描述语言)。首先,你需要生成一个Java Web Service,这可以通过JBuilder完成。在JBuilder中,你可以创建一个新的Web服务项目,...