SAAJ API 介紹

http://melin.javaeye.com/blog/200277

 

SAAJ是一個可是用戶利用java來創建,讀或修改SOAP消息的API,SAAJ包含了對SOAP的
Envelop元素,Body元素,Fault元素以及XML命名空間,元素,屬性,文本註釋和MIME
附件建模的類和接口。SAAJ是一個空的類,有點類似JDBC。又供應商實現。我一般在CXF的
Interceptor中使用的比較多
SAAJ是一個抽象工廠模式,而抽象工廠模式的根就是MessageFactory。它負責創建本身的實例,
而該實例能用於創建SOAPMessage。SOAPMessage包含SOAPPart。SOAPPart表示文檔以及零個或多個
AttachmentPart。
SOAPPart包含一個要對SOAP文檔建立模型的對象族,其中包含Envelop元素,Body元素和Header元素

創建一個簡單的SOAP消息實例:

Java代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <SOAP:Envelope  
  3.     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"  
  4.     xmlns:ns="http://www.javaeye.com/saaj/simple">  
  5.     <soap:body>  
  6.         <ns:getMessage>  
  7.             <msg>Hello World</msg>  
  8.         </ns:getMessage>  
  9.     </soap:body>  
  10. </SOAP:Envelope>  
<?xml version="1.0" encoding="UTF-8"?>
<SOAP:Envelope
	xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
	xmlns:ns="http://www.javaeye.com/saaj/simple">
	<soap:body>
		<ns:getMessage>
			<msg>Hello World</msg>
		</ns:getMessage>
	</soap:body>
</SOAP:Envelope>



對應的java代碼:

Java代碼
  1. MessageFactory msgFactory = MessageFactory.newInstance();  
  2. //用MessageFactory對象創建SOAPMessage對象  
  3. SOAPMessage message = msgFactory.createMessage();  
  4. //如果沒有附件是。可以直接通過getSOAPHeader或getSOAPBody來獲取Header或Body  
  5. //不需要通過這樣的方式來獲取message.getSOAPPart().getEnvelope().getHeader()  
  6. message.getSOAPHeader().detachNode();  
  7. SOAPBody body = message.getSOAPBody();  
  8. SOAPElement getMessage = body.addChildElement("getMessage""ns""http://www.javaeye.com/saaj/simple");  
  9. getMessage.setEncodingStyle(SOAPConstants.URI_NS_SOAP_ENCODING);  
  10. SOAPElement msg = getMessage.addChildElement("msg");  
  11. msg.addTextNode("Hello World");  
  12. message.writeTo(System.out);  
MessageFactory msgFactory = MessageFactory.newInstance();
//用MessageFactory對象創建SOAPMessage對象
SOAPMessage message = msgFactory.createMessage();
//如果沒有附件是。可以直接通過getSOAPHeader或getSOAPBody來獲取Header或Body
//不需要通過這樣的方式來獲取message.getSOAPPart().getEnvelope().getHeader()
message.getSOAPHeader().detachNode();
SOAPBody body = message.getSOAPBody();
SOAPElement getMessage = body.addChildElement("getMessage", "ns", "http://www.javaeye.com/saaj/simple");
getMessage.setEncodingStyle(SOAPConstants.URI_NS_SOAP_ENCODING);
SOAPElement msg = getMessage.addChildElement("msg");
msg.addTextNode("Hello World");
message.writeTo(System.out);



資料:
【1】SAAJ--理論上很美,實踐中受阻?
【2】The Sorry State of SAAJ

 

CXF Interceptor獲取SOAP Header中數據的方法

http://melin.javaeye.com/blog/223643

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章