受信したメッセージをXMLデータとして処理する場合は,Cosminexus XML Processorのオブジェクトに変換して解析する方法を推奨します。
SOAP通信基盤でXMLデータを埋め込んだSOAPメッセージを受信し,データを取り出す場合,次の手順で処理してください。
受信メッセージを解析する場合のコーディング例を次に示します。
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
public class Sample3 {
/**
* 受信したSOAPMessageオブジェクト全体を,DOMのオブジェクトに変換する
* @param doc 変換先のDocument (Cosminexus XML Processorで作成したもの)
* @param msg 変換元のSOAPMessage(受信したもの)
* @return 変換した要素
*/
public Node sample(Document doc, SOAPMessage msg) {
Node n = null;
try {
// SAAJのデータを,Cosminexus XML Processorにインポートする
SOAPEnvelope env = msg.getSOAPPart().getEnvelope();
n = doc.importNode(env, true);
}
catch (Exception e) {
// 省略
}
return n;
}
}
受信メッセージがSOAP Faultメッセージである場合も,DOMとして解析することができます。また,SOAPFaultインタフェースを利用して,faultStringなどにアクセスすることもできます。
SOAPFaultインタフェースを利用する場合でも,Detail要素以下にXMLデータを格納している場合は,Cosminexus XML Processorのオブジェクトに変換して解析してください。
SOAP Faultメッセージである受信メッセージを解析する場合のコーディング例を次に示します。
import javax.xml.soap.Detail;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPMessage;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
public class Sample4 {
/**
* 受信したSOAPFaultのdetail要素をDOMのNodeオブジェクトに変換する。
*
* @param doc 変換先の Document (Cosminexus XML Processorで作成したもの)
* @param msg 変換元の SOAPMessage (受信したもの)
* @return 変換した要素
*/
public Node sample(Document doc, SOAPMessage msg) {
Node n = null;
try {
SOAPBody body = msg.getSOAPBody();
if (body.hasFault()) {
SOAPFault fault = body.getFault();
// SOAPFaultのほかの要素(faultStringなど)にアクセスする
String faultString = fault.getFaultString();
// 省略
// DetailだけはDOMとして取得する
Detail detail = fault.getDetail();
n = doc.importNode(detail, true);
}
else {
// 省略
}
}
catch (Exception e) {
// 省略
}
return n;
}
}