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消息實例:
- <?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>
<?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代碼:
- 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);
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