Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド
|
目次
索引
|
C.4 Faultの処理
SOAPメッセージを送信する送信アプリケーションは、サーバシステムからの復帰情報としてFaultメッセージを受信する場合があります。SAAJ-APIではFaultはSOAPFaultオブジェクトとして表されます。SOAPFaultオブジェクトはSOAPMessageオブジェクト中のSOAPBodyオブジェクトの子要素として設定されます。
Faultを起こすアプリケーションはSOAPBody.addFaultメソッドでSOAPFaultオブジェクトを生成し、Faultを受けるアプリケーションはSOAPBody.getFaultメソッドでSOAPFaultオブジェクトを取り出すことができます。また送信アプリケーションはSOAPBody.hasFaultメソッドで受信したSOAPMessageオブジェクト中にFaultがあるかどうかを判定できます。
SOAPFaultオブジェクトには以下の情報が保持され、アプリケーションではそれらの情報を設定・取得できます。
Faultコード/Fault説明/Faultアクタの操作をする場合は、必ずSOAPFaultクラスのset系メソッド(setFaultXXXXX)を使用してください。SOAPElement.addTextNodeでは、情報を設定できません。
- Faultコード(java.lang.String)
- Fault説明(java.lang.String)
- Faultアクタ(java.lang.String)
- Fault詳細(javax.xml.soap.Detail)
import javax.xml.soap.*;
import java.util.Iterator;
....
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage msg = mf.createMessage();
SOAPPart part = msg.getSOAPPart();
SOAPEnvelope env = part.getEnvelope();
env.getHeader().detachNode();
SOAPBody body = env.getBody();
.....
// SOAPFaultを設定する場合
SOAPFault fault = body.addFault();
fault.setFaultActor(Faultアクタ);
fault.setFaultCode(Faultコード);
fault.setFaultString(Fault説明);
Detail detail = fault.addDetail();
DetailEntry entry = detail.addDetailEntry( ..... );
entry.addChildElement(...);
.....
SOAPMessage reply = .....;
// Faultが発生したかを判定
env = reply.getSOAPPart().getEnvelope();
body = env.getBody();
if( body.hasFault() ) {
// Fault発生
fault = body.getFault();
String faultActor = fault.getFaultActor();
String faultCode = fault.getFaultCode();
String faultString = fault.getFaultString();
detail = fault.getDetail();
Iterator it = detail.getDetailEntries();
while( it.hasNext() ){
entry = (DetailEntry)it.next();
......
}
}
else{
// 正常処理
.....
} |
SOAPFaultインタフェースはSOAPBodyの子要素を表すSOAPBodyElementインタフェースを継承しています。SOAPFault,SOAPFaultElement,Detail,DetailEntryの各インタフェースは、SOAPElementインタフェースを継承していますので、通常のSOAPメッセージの組み立てと同じようにFault情報を組み立てることができます。
- C.4.1 Fault情報の解析
Copyright 2008 FUJITSU LIMITED