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代碼
- <?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:Envelopexmlns: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代碼
- 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