如何使用用于 XML 消息传递的 Java API(Java API for XML Messaging (JAXM))简化创建和发送 SOAP 消息的过程。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Web 服务的基础在于以标准格式发送和接收消息以便使所有系统都能理解。通常,那种格式是简单对象访问协议(Simple Object Access Protocol (SOAP))。SOAP 消息可以手工生成和发送,但是用于 XML 消息传递的 Java API(JAXM)使许多必需步骤(如创建连接或创建并发送实际消息)自动化。
这个过程包含五个步骤:
创建 SOAP 连接
创建 SOAP 消息
填充消息
发送消息
检索应答
一个基本的 SOAP 消息由包含两个主要部分(报头和主体)的封套组成。应用程序决定如何使用这些部分,但整个消息必须遵循特定的 XML 结构(soap.msg文件
):
<?xmlversion="1.0"encoding="UTF-8"?>
<soap:Envelopexmlns: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:SayHelloxmlns:ns1="http://boomga.com">
</ns1:SayHello>
</soap:Body>
</soap:Envelope>
请注意这个消息的结构。Envelope 包含Body 元素,而二者全都是 http://schemas.xmlsoap.org/soap/envelope/ 名称空间的一部分。整个消息将通过一个 SOAP 连接发送到一个 Web 服务中。
publicstaticvoiddoSoapPost()

{
try

{
//Firstcreatetheconnection
SOAPConnectionFactorysoapConnFactory=
SOAPConnectionFactory.newInstance();
SOAPConnectionconnection=
soapConnFactory.createConnection();
//Next,createtheactualmessage
MessageFactorymessageFactory=MessageFactory.newInstance();
SOAPMessagemessage=messageFactory.createMessage();
//Createobjectsforthemessageparts
SOAPPartsoapPart=message.getSOAPPart();
SOAPEnvelopeenvelope=soapPart.getEnvelope();
SOAPBodybody=envelope.getBody();
//PopulatetheMessage
StreamSourcepreppedMsgSrc=newStreamSource(
newFileInputStream("E://soap.msg"));
soapPart.setContent(preppedMsgSrc);
//Savethemessage
message.saveChanges();
//Checktheinput
System.out.println("/nREQUEST:/n");
message.writeTo(System.out);
System.out.println();
//Sendthemessageandgetareply
//Setthedestination
Stringdestination=
"http://localhost:8000/HelloWorld/services/HelloWorldService";
//Sendthemessage
SOAPMessagereply=connection.call(message,destination);
//Checktheoutput
System.out.println("/nRESPONSE:/n");
//Createthetransformer
TransformerFactorytransformerFactory=
TransformerFactory.newInstance();
Transformertransformer=
transformerFactory.newTransformer();
//Extractthecontentofthereply
SourcesourceContent=reply.getSOAPPart().getContent();
//Settheoutputforthetransformation
StreamResultresult=newStreamResult(System.out);
transformer.transform(sourceContent,result);
System.out.println();
//Closetheconnection
connection.close();
}
catch(Exceptione)

{
System.out.println(e.getMessage());
}
}
运行结果:
REQUEST:
<?xmlversion="1.0"encoding="UTF-8"?>
<soap:Envelopexmlns: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:SayHelloxmlns:ns1="http://boomga.com">
</ns1:SayHello>
</soap:Body>
</soap:Envelope>


RESPONSE:
<?xmlversion="1.0"encoding="UTF-8"?><soap:Envelopexmlns: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:SayHelloResponsexmlns:ns1="http://boomga.com"><ns1:out>dyk,Hell0</ns1:out></ns1:SayHelloResponse></soap:Body></soap:Envelope>
本文介绍如何利用Java API for XML Messaging (JAXM)简化SOAP消息的创建与发送流程。通过五个步骤——创建连接、创建消息、填充消息内容、发送消息及接收响应,演示了使用JAXM进行SOAP通信的具体实现。
349

被折叠的 条评论
为什么被折叠?



