第44章 Message インターフェイス

概要

本章では、Apache Camel コンポーネントの実装で任意のステップである Message インターフェイスを実装する方法を説明します。

44.1. Message インターフェイス

概要

org.apache.camel.Message タイプのインスタンスは、あらゆる種類のメッセージ (In または Out) を表すことができます。メッセージタイプの継承階層を 図44.1「メッセージの継承階層」 に示します。コンポーネントにカスタムメッセージタイプを常に実装する必要はありません。多くの場合、デフォルトの実装 DefaultMessage で十分です。

図44.1 メッセージの継承階層

メッセージの継承階層

Message インターフェイス

例44.1「Message インターフェイス」は、org.apache.camel.Message インターフェイスの定義を示しています。

例44.1 Message インターフェイス

package org.apache.camel;

import java.util.Map;
import java.util.Set;

import javax.activation.DataHandler;

public interface Message {

    String getMessageId();
    void setMessageId(String messageId);

    Exchange getExchange();

    boolean isFault();
    void    setFault(boolean fault);

    Object getHeader(String name);
    Object getHeader(String name, Object defaultValue);
    <T> T getHeader(String name, Class<T> type);
    <T> T getHeader(String name, Object defaultValue, Class<T> type);
    Map<String, Object> getHeaders();
    void setHeader(String name, Object value);
    void setHeaders(Map<String, Object> headers);
    Object  removeHeader(String name);
    boolean removeHeaders(String pattern);
    boolean hasHeaders();

    Object getBody();
    Object getMandatoryBody() throws InvalidPayloadException;
    <T> T  getBody(Class<T> type);
    <T> T  getMandatoryBody(Class<T> type) throws InvalidPayloadException;
    void     setBody(Object body);
    <T> void setBody(Object body, Class<T> type);

    DataHandler getAttachment(String id);
    Map<String, DataHandler> getAttachments();
    Set<String> getAttachmentNames();
    void removeAttachment(String id);
    void addAttachment(String id, DataHandler content);
    void setAttachments(Map<String, DataHandler> attachments);
    boolean hasAttachments();

    Message copy();

    void copyFrom(Message message);

    String createExchangeId();
}

メッセージメソッド

Message インターフェイスは以下のメソッドを定義します。

  • setMessageId()getMessageId(): メッセージ ID の getter メソッドおよび setter メソッド。カスタムコンポーネントでメッセージ ID を使用する必要があるかどうかが実装の詳細となります。
  • getExchange(): 親エクスチェンジオブジェクトへの参照を返します。
  • isFault()setFault(): fault フラグの getter および setter メソッド。このメッセージが障害メッセージであるかどうかを示します。
  • getHeader()getHeaders()setHeader()setHeaders()removeHeader()hasHeaders(): メッセージヘッダーのゲッターメソッドとセッターメソッド。通常、これらのメッセージヘッダーを使用して実際のヘッダーデータを保存するか、その他のメタデータを保存することもできます。
  • getBody()getMandatoryBody()setBody(): メッセージボディーのゲッターメソッドとセッターメソッド。getMandatoryBody() アクセッサーは返されるボディーが null 以外であることを保証します。それ以外の場合は InvalidPayloadException 例外が発生します。
  • getAttachment()getAttachments()getAttachmentNames()removeAttachment()addAttachment()setAttachments()hasAttachments(): 添付ファイルを取得、設定、追加、および削除するメソッド。
  • copy(): 現在のカスタムメッセージオブジェクトと同一の (メッセージ ID を含む) 新しいコピーを作成します。
  • copyFrom(): 指定した汎用メッセージオブジェクト message の完全なコンテンツ (メッセージ ID を含む) を現在のメッセージインスタンスにコピーします。このメソッドは どのような メッセージタイプからでもコピーできる必要があるため、汎用メッセージプロパティーがコピーされますが、カスタムプロパティーはコピーされません。
  • createExchangeId(): メッセージ実装が ID を提供できる場合は、このエクスチェンジの一意の ID を返します。それ以外の場合は、null の戻り値を返します。