用Soap消息调用Web Services
来源:互联网 发布:网络尖兵是什么 编辑:程序博客网 时间:2024/05/23 20:53
如何使用用于 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消息调用Web Services(续)
- 使用Soap消息调用Web Services
- 如何使用Soap消息调用Web Services
- 使用Soap消息调用Web Services
- 使用Soap消息调用Web Services
- 使用Soap消息调用Web Services
- 使用 Web Services Enhancements 发送带有附件的 SOAP 消息
- 运用Web Services安全机制对SOAP消息加密
- c# Web Services学习笔记(二、SOAP消息)
- c# Web Services学习笔记(三、SOAP消息交换模型)
- web services用soap头实现身份验证
- Java SOAP Web services
- SOAP及Web Services
- PHP5 soap web services
- SOAP Web Services 简介
- 构造Soap请求调用Web Services(三)
- wed services SOAP调用实例
- OpenGL选择机制的一点讨论
- 代码分析
- 用Soap消息调用Web Services(续)
- 【转】用JDOM建立XML文件
- 【翻译】Use a bitmap as a background image
- 用Soap消息调用Web Services
- 自定义ListCtrl中设置背景图片的问题
- OpenGL中的鼠标控制
- 颜色干扰的问题解决了
- OpenGL中的混合(Blending)
- OpenGL中的光照和键盘控制
- 【转】openGL中的选择机制
- 纹理贴图的干扰问题
- 一点小疑问