ページの先頭行へ戻る
Interstage Service Integrator V9.7.0 アプリケーション開発ガイド
FUJITSU Software

7.3.2 アダプタ出口アプリケーションの作成

例を元にアダプタ出口アプリケーションの作成方法を説明します。

注意

  • System.exit()は行わないでください。

  • 出口アプリケーションでは、スレッド生成やスレッド制御処理を行わないでください。

  • コンストラクタを定義する場合は、publicな引数なしのコンストラクタを定義してください。

7.3.2.1 出口アプリケーションの実装例

前出口、後出口、エラー出口を利用する場合の、出口アプリケーションの実装例を以下に示します。

package com.example.myesb;

import com.fujitsu.esi.process.api.ESIErrorHandler;
import com.fujitsu.esi.process.api.ESIPostProcess;
import com.fujitsu.esi.process.api.ESIPreProcess;
import com.fujitsu.esi.process.api.ESIProcessDataBean;
import com.fujitsu.esi.process.api.ESIProcessException;
import com.fujitsu.esi.process.api.ESISOAPInfo;
import com.fujitsu.esi.message.ESIHeaderConstants;

public class UserProcess implements ESIPreProcess, ESIPostProcess, ESIErrorHandler {

    public void callPreProcess(ESIProcessDataBean msg)
            throws ESIProcessException {
        // 前出口処理を記述
    }

    public void callPostProcess(ESIProcessDataBean msg)
            throws ESIProcessException {
        // 後出口処理を記述
    }

    public void handleException(ESIProcessException error, ESIProcessDataBean msg)
            throws ESIProcessException {
        // エラー出口処理を記述
    }
}

7.3.2.2 エラー原因情報の参照方法

エラー出口処理では、パラメーターで渡されたエラー情報から、エラーの原因情報を取得して参照することができます。エラーの原因情報を取得する方法を以下に示します。

public class UserProcess implements ESIPreProcess, ESIPostProcess, ESIErrorHandler {

    public void handleException(ESIProcessException error, ESIProcessDataBean msg)
            throws ESIProcessException {

        // パラメーターのエラー情報からエラーの原因情報を取得
        Throwable cause = error.getCause();

    }
}

7.3.2.3 任意のSOAP Faultの設定方法

エラー出口で任意のSOAP Faultを設定する場合の、エラー出口メソッドの実装例を以下に示します。

public void handleException(ESIProcessException error, ESIProcessDataBean msg)
    throws ESIProcessException {

    // SOAP1.2のSOAP Faultを作成する
    StringBuffer sb = new StringBuffer();
    sb.append(
        "<?xml version=\"1.0\" ?>" +
        "<env:Envelope xmlns:env=\"http://www.w3.org/2003/05/soap-envelope\">" +
            "<env:Body>" +
                "<env:Fault>" +
                    "<env:Code>" +
                        "<env:Value>" );
                            sb.append("env:Receiver");
    sb.append(
                        "</env:Value>" +
                    "</env:Code>" +
                    "<env:Reason>" +
                        "<env:Text xml:lang=\"ja\">" );
                            sb.append("Error Message" );
    sb.append(
                        "</env:Text>"+
                    "</env:Reason>" +
                "</env:Fault>" +
            "</env:Body>" +
        "</env:Envelope>" );

    byte[] payload = null;
    try {
        payload = sb.toString().getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
        // 例外処理
    }
    msg.setPayload(payload);

}

7.3.2.4 サービス呼出しメディエータファンクションのリトライ処理を行わない方法

以下に設定例を示します。

public class UserProcess implements ESIPreProcess, ESIPostProcess, ESIErrorHandler {

    public void handleException(ESIProcessException error, ESIProcessDataBean msg)
            throws ESIProcessException {
        // 共通メッセージのヘッダを取得
        Map<String, String> header = msg.getHeader();

        // サービス呼出しのリトライを行わないように"true"を設定
        header.put("com.fujitsu.esi.function.servicecall.retry.ignore", "true");

    }
}

7.3.2.5 SOAPアダプタの出口で、添付データを取得する方法

以下に後出口の例を示します。前出口とエラー出口の例もここで示す例とほぼ同様の内容となります。

public class UserProcess implements ESIPreProcess, ESIPostProcess, ESIErrorHandler {

    // 後出口処理
    public void callPostProcess(ESIProcessDataBean msg)
        throws ESIProcessException {
        try {
            byte[] b = msg.getPayload();
            String soapmsg = new String( b, "UTF-8" );

            ESISOAPInfo si = (ESISOAPInfo) msg.getAdapterInfo();
            MimeMultipart mmp = si.getMimeMultipart();

            int partCount = mmp.getCount();
            for( int i = 0; i < partCount; i++ ) {
                BodyPart bp = mmp.getBodyPart( i);

                ContentType ct = new ContentType( bp.getContentType() );
                String basetype = ct.getBaseType().toLowerCase();
                if( basetype.equals ("application/xop+xml")) {
                    // ルートパート(SOAPメッセージ)の参照
                    Object obj = bp.getContent();
                    …省略…
                } else {
                    // 添付ファイル参照
                    Object obj = bp.getContent();
                    …省略…
                }
            }
        } catch (UnsupportedEncodingException uee) {
            // 例外処理
        } catch (MessagingException me) {
            // 例外処理
        } catch (IOException e) {
            // 例外処理
        }
    }
}

7.3.2.6 コンパイルに必要なクラスパス

作成したアプリケーションをコンパイルする場合、クラスパスに以下のパスを追加してください。

<INSDIR>\lib\esicore.jar

/opt/FJSVesi/lib/esicore.jar

7.3.2.7 jarファイルの作成

作成したアプリケーションをjarファイルにまとめます。

実行例

jar cf application.jar .