8.6.1 TP1/COBOL SOAPサービスクラス用Beanユーザインタフェース
TP1/COBOLアクセス用Beanと異なり,TP1/COBOL SOAPサーバ用BeanおよびTP1/COBOL SOAPクライアント用Beanから,TP1/ClientおよびCosminexus TP1 Connectorの呼び出すインタフェースはありません。そのため,バイト配列で入力/出力引数を設定および参照して,データの受け渡しを行います。
SOAPクライアントで設定および参照する入出力引数は,SOAPクライアントからSOAPサーバにバイト配列(byte[])で受け渡します。
SOAPサーバは,COBOL SPPを呼び出す処理を行うだけで,バイト配列で受け渡すデータを操作する必要はありませんが,SOAPサーバ用アクセスBeanを使用すると,SOAPサーバ上でCOBOL SPPに受け渡す入出力引数を参照および変更することができます。SOAPサーバ上でCOBOL SPPに受け渡す入出力引数を変更しない場合,呼び出す必要はありません。
TP1/COBOLアクセスでのCosminexus SOAPアプリケーション連携の詳細は「10. TP1/COBOL SOAPサービスクラス生成機能」をご覧ください。
- 〈この項の構成〉
(1) Java UAPの処理の流れ
ここではJava UAPの流れについて説明します。処理の流れの概要については,「10.2 TP1/COBOL SOAPクライアント/サーバ用Beanの位置づけ」をご覧ください。ここではプログラムコードレベルの流れを紹介します。
(a) SOAPクライアント(サーブレット)の場合
: // : TP1SPPCBean bean = new TP1SPPCBean(); // TP1/COBOL SOAPクライアント用Beanインスタンス生成 bean.setDataI(xxx); // 入力引数データの設定 : // : TP1SPP_ServiceLocator uis = null; TP1SPP_Port ui = null; : // : uis = new TP1SPP_ServiceLocator(); // WSDLからソースを生成で自動生成されたプログラム : // : ui = uis.getTP1server(); // WSDLからソースを生成で自動生成されたメソッド : // : byte[] inDat = bean.getBytesData(bean.inIndex); //TP1/COBOL SOAPクライアント用Beanから入力引数全体のバイト配列取得 ByteArrayHolder outData = null; ui.methodName(inDat, outData); // SOAPサーバ上のスケルトン呼び出し setBytesData(bean.outIndex, outData.value); // TP1/COBOL SOAPクライアント用Beanへ出力引数全体のバイト配列設定 String sdata = (Strinf)bean.getSdataO(); // 出力引数データの取得
(b) SOAPサーバの場合(入力/出力引数を変更しない場合)[Cosminexus TP1 Connectorの例]
public byte[] uapMethod(byte[] inDat){// 入力引数を受け取り,出力引数を返す : javax.resource.cci.RecordFactory rf = cxf.getRecordFactory(); // RecordFactoryを取得 javax.resource.cci.IndexedRecord input = rf.createIndexedRecord("in_record"); // 入力引数用のインデックスレコード作成 javax.resource.cci.IndexedRecord output = rf.createIndexedRecord("out_record"); // 出力引数用のインデックスレコード作成 input.add(inDat); // 入力引数の設定 output.add(new byte[skeltonClass.outMaxSize]); // 出力引数の設定 boolean ret = ix.execute(ixSpec, input, output); // Cosminexus TP1 Connector経由でCOBOL SPPを呼び出す byte[] outDat = (byte[])output.get(0); // 出力引数のバイト配列を取得 : return outDat; // 出力引数を返す :
(c) SOAPサーバの場合(入力/出力引数を変更する場合)[Cosminexus TP1 Connectorの例]
public byte[] uapMethod(byte[] inDat){ // 入力引数を受け取り,出力引数を返す : TP1SPPSBean bean = new TP1SPPSBean(); // TP1/COBOL SOAPサーバ用Beanインスタンス生成 bean.setBytesData(bean.inIndex, inDat); // TP1/COBOL SOAPサーバ用Beanへ入力引数全体のバイト配列設定 String data1 = (String)bean.getData1I(); // 入力引数データの取得 : bean.setData1I(“DATA OK”); // 入力引数データの設定 : byte[] editedInDat = (byte[])bean.getBytesData(bean.inIndex); //TP1/COBOL SOAPサーバ用Beanから入力引数全体のバイト配列取得 : input.add(editedInDat); // 入力引数の設定 output.add(new byte[skeltonClass.outMaxSize]); // 出力引数の設定 boolean ret = ix.execute(ixSpec, input, output); // Cosminexus TP1 Connector経由でCOBOL SPPを呼び出す byte[] outDat = (byte[])output.get(0);// 出力引数のバイト配列を取得 bean.setBytesData(bean.outIndex, outDat); // TP1/COBOL SOAPサーバ用Beanへ出力引数全体のバイト配列設定 String data2 = (String)bean.getData2O(); // 出力引数データの取得 : bean.setData2O(“DATA NG”); // 出力引数データの設定 : byte[] editedOutDat = (byte[])bean.getBytesData(bean.outIndex); // TP1/COBOL SOAPサーバ用Beanから出力引数全体のバイト配列取得 return editedOutDat; // 出力引数を返す :
(2) 引数の設定と取得
(a) 入力/出力引数の取得
[getBytesDataメソッド] public byte[] getBytesData(int index) throws J2CBException
TP1/COBOL SOAPサーバ/クライアント用Beanから,入力/出力引数を取得する。
- パラメータ:
-
index - 引数種別
-
bean名.inIndex :入力引数
-
bean名.outIndex:出力引数
-
- 戻り値:
-
入力/出力引数であるバイト配列データ
- 例外:J2CBException - 例外情報の取得
-
詳細は「8.8 J2CBExceptionユーザインタフェースAPI」をご覧ください。
(b) 入力引数データの取得
[getXxxIメソッド] public Object getXxxI( [ int dim1 { , int dim2 } … ] ) throws J2CBException
メソッド名getXxxIのXxxは,設定するデータ項目のデータ名を表します。
その他詳細は,「8.2.2(2) 出力引数データの取得」をご覧ください。
- パラメータ:
-
dim1,dim2…:(添字が必要な場合の)各次元の添字
- 戻り値:
-
取得できたデータオブジェクト
- 例外:J2CBException - 例外情報の取得
-
詳細は「8.8 J2CBExceptionユーザインタフェースAPI」をご覧ください。
(c) 出力引数データの取得
[getXxxOメソッド] public Object getXxxO( [ int dim1 { , int dim2 } … ] ) throws J2CBException
詳細は,「8.2.2(2) 出力引数データの取得」をご覧ください。
- パラメータ:
-
dim1,dim2…:(添字が必要な場合の)各次元の添字
- 戻り値:
-
取得できたデータオブジェクト
- 例外:J2CBException - 例外情報の取得
-
詳細は「8.8 J2CBExceptionユーザインタフェースAPI」をご覧ください。
(d) setter発行時に引数長設定
[setBytesDataメソッド] public void setBytesData(int index, byte[] data, int setMode) throws J2CBException
TP1/COBOL SOAPサーバ/クライアント用Beanに入力/出力引数を設定する。
- パラメータ:
-
- index - 引数種別
-
-
bean名.inIndex :入力引数
-
bean名.outIndex:出力引数
-
- data - 設定する入力/出力引数のバイト配列データ
-
指定された引数のバイト配列は,TP1/COBOL SOAPサーバ/クライアント用Beanで同じ長さで確保した作業領域にコピーされます。引数の定義長ではない点に,注意してください。
<出力引数定義例> 01 GRP1. 02 ITEM1 PIC X(30). 02 ITEM2 PIC X(20). 02 ITEM3 PIC X(10). <Java UAP例> : // 50バイトのバイト配列wkOutDataを設定する bean.setBytesData(bean.inIndex, wkOutData, TP1Const.ASEXCEPT); // 定義長の60バイトではなく,引数に指定されたバイト配列長である // 50バイトのバイト配列を新たに確保し,指定された引数をコピーする String wk3 = (String)bean.getItem3O(); // 例外となる
- 戻り値:
-
なし
- 例外:J2CBException - 例外情報の取得
-
詳細は「8.8 J2CBExceptionユーザインタフェースAPI」をご覧ください。
(e) setter発行時に引数長設定メソッド
[setGroupItemLenFollowSetDataメソッド] public void setGroupItemLenFollowSetData(int index) throws J2CBException
引数種別を指定する点を除いて,「8.2.2(4) setter発行時の入力引数長設定」と同様です。
- パラメタ:
-
- index - 引数種別
-
-
inIndex :入力引数
-
outIndex:出力引数
-
- 戻り値:
-
なし
- 例外:J2CBException - 例外情報の取得
-
詳細は「8.8 J2CBExceptionユーザインタフェースAPI」をご覧ください。
(f) 入力引数データの設定
[setXxxIメソッド] public void setXxxI(Object xxxI [ , int dim1 { , int dim2 } … ] ) throws J2CBException
詳細は,「8.2.2(5)入力引数データの設定」と同様です。
- パラメータ:
-
xxxI - 設定するデータ
dim1,dim2…:(添字が必要な場合の)各次元の添字
- 戻り値:
-
なし
- 例外:J2CBException - 例外情報の取得
-
詳細は「8.8 J2CBExceptionユーザインタフェースAPI」をご覧ください。
(g) 出力引数データの設定
[setXxxOメソッド] public Object setXxxO(Object xxxO [ , int dim1 { , int dim2 } … ] ) throws J2CBException
出力引数に値を設定する点を除いて,「8.2.2(5) 入力引数データの設定」と同様です。
- パラメータ:
-
xxxO - 設定するデータ
dim1,dim2…:(添字が必要な場合の)各次元の添字
- 戻り値:
-
なし
- 例外:J2CBException - 例外情報の取得
-
詳細は「8.8 J2CBExceptionユーザインタフェースAPI」をご覧ください。