Hitachi

TP1/COBOL adapter for Cosminexus ユーザーズガイド


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」をご覧ください。