| Interstage Application Server SOAPサービス ユーザーズガイド |
目次
索引
![]()
|
| 第6章 CORBA/SOAPゲートウェイの実装 | > 6.3 CORBAアプリケーションと連携する場合の留意事項 |
Factoryインタフェースを使用したCORBAサーバアプリケーションは、サーバオブジェクト(Servantインタフェース)を作成するFactoryインタフェースと、Factoryインタフェースから生成されるServantインタフェースの2種類のインタフェースを持ちます。
Factoryインタフェースと連携するRPCクライアントアプリケーションを作成する場合、以下の順序でCORBAサーバアプリケーションのオペレーションを呼び出す必要があります。

以降の説明は、次のIDL定義から作成されたCORBAサーバアプリケーションと連携するRPC方式のクライアントアプリケーションを例にとり、説明します。

module sample{
interface demoservant {
struct result {
long add_result;
long subtract_result;
};
result calculate( in long a, in long b );
void remove();
};
interface demofactory {
demoservant create ();
};
}; |
Factoryインタフェースに定義したServantインタフェース生成用のオペレーションを呼び出し、ServantインタフェースのURIを取得します。

| // import宣言 import javax.xml.rpc.Call; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.Service; import javax.xml.rpc.ServiceFactory; import javax.xml.namespace.QName; import javax.xml.rpc.encoding.XMLType; : String nskey = null; try { : // Serviceオブジェクトの作成 Service service = ServiceFactory.newInstance().createService(new QName("","")); // Callオブジェクトの作成 Call call = service.createCall(); call.setTargetEndpointAddress( "http://interstage/soap/servlet/WSContainer"); call.setOperationName( new QName("sample-countRequest", "create" )); call.setReturnType(XMLType.XSD_STRING); Object[] param = new Object[0]; String tmp1 = (String)call.invoke( param ); // demoservantインタフェースのURI取得 nskey = call.getOperationName().getNamespaceURI(); : } catch( javax.xml.rpc.ServiceException e ) { : } catch( javax.xml.rpc.soap.SOAPFaultException e ) { : } catch( javax.xml.rpc.JAXRPCException e ) { : } catch( java.rmi.RemoteException e ) { : } catch( java.lang.Exception e ) { : } : |
FactoryインタフェースのServantインタフェース生成用のオペレーションを呼び出して得られたServantインタフェースのURIを使用して、Servantインタフェースのリモートメソッドを呼び出します。Servantインタフェースを解放するまで、何度でも呼び出しができます。

// import宣言
import javax.xml.rpc.Call;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
import javax.xml.namespace.QName;
import javax.xml.rpc.encoding.XMLType;
:
try {
:
// Callオブジェクトの作成
Call call = service.createCall();
call.setTargetEndpointAddress(
"http://interstage/soap/servlet/WSContainer");
call.setOperationName( new QName(nskey, "calculate" ));
// パラメタ情報の登録
call.addParameter( "a", XMLType.XSD_INT, ParameterMode.IN );
call.addParameter( "b", XMLType.XSD_INT, ParameterMode.IN );
call.setReturnType(
new QName("urn:Fujitsu-Soap-Service-Data",
"sample-demoservant-result") );
// パラメタの作成
Object[] param = new Object[]{
new java.lang.Integer(1), new java.lang.Integer(2)};
// webサービスの呼び出し
sample.demoservantPackage.resultSOAPGWType result
= (sample.demoservantPackage.resultSOAPGWType)call.invoke( param );
} catch( javax.xml.rpc.ServiceException e ) {
:
} catch( javax.xml.rpc.soap.SOAPFaultException e ) {
:
} catch( javax.xml.rpc.JAXRPCException e ) {
:
} catch( java.rmi.RemoteException e ) {
:
} catch( java.lang.Exception e ) {
:
}
: |
Servantインタフェースに対するすべてのリモートメソッド呼び出しが終了したら、生成したServantインタフェースを解放します。Servantインタフェースの解放は、Servantインタフェースに定義してある解放用のメソッドを呼び出します。

| // import宣言 import javax.xml.rpc.Call; import javax.xml.rpc.Service; import javax.xml.rpc.ServiceFactory; import javax.xml.namespace.QName; : try { : // Callオブジェクトの作成 Call call = service.createCall(); call.setTargetEndpointAddress( "http://interstage/soap/servlet/WSContainer"); call.setOperationName( new QName(nskey, "remove")); // パラメタの作成 Object[] param = new Object[0]; // webサービスの呼び出し call.invoke( param ); } catch( javax.xml.rpc.ServiceException e ) { : } catch( javax.xml.rpc.soap.SOAPFaultException e ) { : } catch( javax.xml.rpc.JAXRPCException e ) { : } catch( java.rmi.RemoteException e ) { : } catch( java.lang.Exception e ) { : } : |
RPC方式のクライアントアプリケーションと連携するFactoryインタフェースを使用したCORBAアプリケーションは、必ず以下のIDL定義の注意事項を遵守してください。
目次
索引
![]()
|