WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

JAXB Java オブジェクト・クラスを使用したメッセージ本体データの処理

JAXB クラス・テンプレートを使用して、Java™ Architecture for XML Binding (JAXB) コンパイラーによって生成された JAXB オブジェクト・クラスを使用します。

始める前に:
JavaCompute ノードで Java Architecture for XML Binding (JAXB) を使用して、メッセージ・モデル・スキーマ・ファイルから生成した JAXB Java オブジェクト・クラスを利用、作成、操作することによって、メッセージを処理できます。

JAXB Java オブジェクト・クラスは、メッセージの Java オブジェクト表現であり、Java コード完了で使用できます。 「新規 Java 計算ノード・クラス」ウィザードの「JAXB クラスを介して処理」テンプレートは、JAXB Java オブジェクト・クラスを使用してメッセージを処理するためのテンプレート・コードを生成します。 また、「新規 Java 計算ノード・クラス」ウィザードを使用して、 JAXB Java オブジェクト・クラスの生成または既存の JAXB Java オブジェクト・クラスの参照を行った場合には、ステップ 1 が自動的に完了する場合があります。

メッセージング・ソリューションでの JAXB の使用について詳しくは、JavaCompute Node JAXB Transformationのサンプルを参照してください。

サンプルに関する情報は、WebSphere Message Broker Toolkit に統合されているインフォメーション・センター、またはオンライン・インフォメーション・センターを使用する場合にのみ表示できます。 サンプルは、WebSphere Message Broker Toolkit に統合されているインフォメーション・センターを使用する場合にのみ実行できます。

JAXB Java オブジェクト・クラスを使用してメッセージ本体データを処理するには、以下の手順を実行します。

  1. オプション: Java オブジェクト・バインディング・クラスが含まれる 1 つ以上のパッケージを参照するように、onInitialize () メソッドを変更します。
    	public void onInitialize() throws MbException {
    		try {
    			// TODO Update context path "com.example.jaxb" to be the package of your
    			// Java object classes that were generated by a Java Architecture for XML
    			// Binding (JAXB) binding compiler  
    			jxbcntxt = JAXBContext.newInstance("com.example.jaxb");

    com.example.jaxb を、JAXB Java オブジェクト・バインディング・クラス・パッケージに置換します。

    注: メッセージ・フローをデプロイまたは再始動すると、onInitialize () メソッドが一度だけ呼び出されて、すべての処理スレッドに対して JAXB コンテキストを初期化します。

    JAXB コンテキストの生成でエラーがスローされた場合、「JAXB クラスを介して処理」テンプレートに提供されているコードが MbUserException をスローして、デプロイメント操作が失敗します。 デプロイメント操作が失敗した場合には、ホスト・システムのイベント・ログに記録されているエラー・メッセージを検査し、原因を究明します。 最も可能性の高い原因としては、1 つ以上のパッケージ名が解決できないか、指定したパッケージの 1 つ以上に必須の JAXB オブジェクト・ファクトリーまたはバインディング・プロパティーが含まれていないことが考えられます。

  2. MbMessageAssembly オブジェクトに渡される各メッセージを処理するように、evaluate() メソッドを変更します。 MbMessageAssembly オブジェクトは、Java ユーザー定義ノード API に定義されます。
    1. evaluate() メソッドの最初のセクションは、アセンブリーからメッセージ・データを抽出し、出力アセンブリーを作成して、メッセージ・ヘッダーをコピーします。 詳しくは、Java でのメッセージ処理ノードまたは出力ノードの作成を参照してください。
      public void onInitialize() throws MbException {
      try {
      // TODO Update context path "com.example.jaxb" to be the package of your
      // Java object classes that were generated by a Java Architecture for XML
      // Binding (JAXB) binding compiler
      jaxbContext = JAXBContext.newInstance("com.example.jaxb");
      } catch (JAXBException e) {
      // This exception will cause the deploy of this Java compute node to fail
      // Typical cause is the JAXB package above is not available
      MbUserException mbue = new MbUserException(this, "onInitialize()",
      "", "", e.toString(), null);
      throw mbue;
      }
      }
    2. evaluate() メソッドの次の部分は、入力メッセージ・データを、メッセージ・スキーマからバインドされる Java オブジェクトの集合としてアンマーシャル します。 アンマーシャルすることにより、メモリー内に保存されたメッセージ・データの Java オブジェクト・モデル・コピーが作成されます。
      try {
      // unmarshal the input message data from the Broker tree into your Java object classes
      Object inMsgJavaObj = jaxbContext.createUnmarshaller().unmarshal(inMessage.getDOMDocument());
    3. evaluate() メソッドの次の部分は、メッセージ・データを処理することによって出力メッセージを作成または更新する独自の JAXB コードを挿入する場所です。 JAXB Java オブジェクト・クラスを使用した変換のプログラミングについて詳しくは、外部リソースを参照してください。 Java でのデバッグについては、Java デバッガーを参照してください。
      // ----------------------------------------------------------
      // Add user code below to build the new output data by updating
      // your Java objects or building new Java objects
      Object outMsgJavaObj = inMsgJavaObj;
      // End of user Java object processing
      // ----------------------------------------------------------
      以下の例は、レコードを CSV メッセージに追加し、そのレコードの 3 つのフィールドに値を設定する JAXB コードを示しています。
      // Example: add a record of fixed data
      CsvMsg outMsgJavaObj = (CsvMsg) inMsgJavaObj;
      Record additionalCsvRecord = new Record();
      additionalCsvRecord.setField1("My new field 1 text");
      additionalCsvRecord.setField2("My new field 2 text");
      additionalCsvRecord.setField3("My new field 3 text");
      outMsgJavaObj.getRecord().add(additionalCsvRecord);
      // end example
    4. evaluate() メソッドの次の部分は、処理された Java オブジェクト・クラスを、ブローカー・メッセージ・ツリーとしてマーシャル します。 このコードを変更して、テンプレートのデフォルトの代わりに該当する Java オブジェクトを渡すようにします。 JAXB 変換コードによって入力メッセージが更新される場合は、アンマーシャル中に作成された Java オブジェクト・クラスをマーシャル・コードに渡します。 出力メッセージを作成する場合は、新規出力メッセージの Java オブジェクト・クラスをマーシャル・コードに渡します。 このテンプレートは、出力ドメインを XMLNSC に設定します。出力メッセージを DFDL ドメインまたは SOAP ドメインに入れる必要がある場合には、このコードを変更する必要があります。
      // TODO set the required Broker domain to for the output message, eg XMLNSC
      Document outDocument = outMessage.createDOMDocument(MbXMLNSC.PARSER_NAME);
      // marshal the new or updated output Java object class into the Broker tree
      jaxbContext.createMarshaller().marshal(outMsgJavaObj, outDocument);
次に行う事柄:
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:45:57


タスク・トピックタスク・トピック | バージョン 8.0.0.5 | ac49011_