// import文宣言
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
import javax.xml.rpc.soap.SOAPFaultException;
import javax.xml.rpc.encoding.TypeMappingRegistry;
import javax.xml.rpc.encoding.TypeMapping;
import javax.xml.soap.Detail;
import javax.xml.soap.DetailEntry;
import javax.xml.namespace.QName;
import java.util.Iterator;
import javax.xml.soap.SOAPElement;
:
try {
:
Service service = null;
service = ServiceFactory.newInstance().createService(new QName("",""));
TypeMappingRegistry tmr = service.getTypeMappingRegistry();
TypeMapping tm = tmr.createTypeMapping();
// 例外クラス QName作成
QName _qname =
new QName( "urn:Fujitsu-Soap-Service-Data", "pack1-SubExceptionSOAPGWType" );
// 例外クラスのマッピング登録
tm.register(pack1.SubException.class, _qname,
new com.fujitsu.interstage.soapx.encoding.ser.BeanSerializerFactory(
pack1.SubException.class, _qname),
new com.fujitsu.interstage.soapx.encoding.ser.BeanDeserializerFactory(
pack1.SubException.class, _qname ) );
// マッピング情報をマッピングレジストリへ登録
tmr.register( "http://schemas.xmlsoap.org/soap/encoding/", tm );
:
// メソッド呼び出し
..... = call.invoke( ... );
:
} catch( javax.xml.rpc.ServiceException e ) {
:
} catch( SOAPFaultException e ) {
// Fault情報の取得
QName _faultCode = e.getFaultCode();
String _faultString = e.getFaultString();
String _faultActor = e.getFaultActor();
Detail _detail = e.getDetail();
if( _detail != null ){
// Fault詳細項目の取得
String _detailMessage = null;
int _detailCode = 0;
Iterator _it = _detail.getChildElements();
if( _it != null ) {
while(_it.hasNext()) {
SOAPElement _elm = (SOAPElement)_it.next();
String _elmName = _elm.getElementName().getLocalName();
// 例外クラス情報の判定
if( _elmName.equals("pack1-SubExceptionSOAPGWType")) {
//
// 例外クラスの各メンバ情報を取得し例外クラスを構築する方法
//
pack1.SubException excep;
_it = _elm.getChildElements();
// 例外クラスのメンバ情報の取得
// 例外クラスに定義されたメンバ名でメンバ情報を取得する
while(_it.hasNext()) {
_elm = (SOAPElement)_it.next();
_elmName = _elm.getElementName().getLocalName();
if( _elmName.equals("detailMessage")) {
_detailMessage = _elm.getValue();
}
else if( _elmName.equals("detailCode")) {
_detailCode = (new Integer((String)_elm.getValue())).intValue();
}
}
// 例外クラスの作成
excep = new pack1.SubException();
// 例外クラスメンバ情報の設定
excep.detailMessage = _detailMessage;
excep.detailCode = _detailCode;
// 例外クラスのスロー
throw excep;
//
// Interstage SOAPサービスが提供する拡張APIを使用して例外クラスを取得する方法
//
QName ExcepQName =
new QName( "urn:Fujitsu-Soap-Service-Data",
"pack1-SubExceptionSOAPGWType" );
java.lang.Object excep;
// 例外クラスの取得
try {
excep = ((com.fujitsu.interstage.soapx.message.SOAPElementImpl)_elm)
.getValueAsType(ExcepQName);
} catch( java.lang.Exception ee ) {
: // 取り出しに失敗した場合の処理を記述
}
// 例外クラスのスロー
throw (pack1.SubException)excep;
}
}
}
}
} |