44.2. Message インターフェイスの実装

カスタムメッセージの実装方法

例44.2「カスタムメッセージの実装」 は、DefaultMessage クラスを拡張してメッセージを実装する方法を概説します。

例44.2 カスタムメッセージの実装

import org.apache.camel.Exchange;
import org.apache.camel.impl.DefaultMessage;

public class CustomMessage extends DefaultMessage { 1

    public CustomMessage() { 2
        // Create message with default properties...
    }

    @Override
    public String toString() { 3
        // Return a stringified message...
    }

    @Override
    public CustomMessage newInstance() { 4
        return new CustomMessage( ... );
    }

    @Override
    protected Object createBody() { 5
        // Return message body (lazy creation).
    }

    @Override
    protected void populateInitialHeaders(Map<String, Object> map) { 6
        // Initialize headers from underlying message (lazy creation).
    }

    @Override
    protected void populateInitialAttachments(Map<String, DataHandler> map) { 7
        // Initialize attachments from underlying message (lazy creation).
    }
}
1
org.apache.camel.impl.DefaultMessage クラスを拡張し、カスタムメッセージクラス CustomMessage を実装します。
2
通常、デフォルトのプロパティーでメッセージを作成するデフォルトコンストラクターが必要です。
3
toString() メソッドを上書きして、メッセージ文字列をカスタマイズします。
4
newInstance() メソッドは、MessageSupport.copy() メソッド内から呼び出されます。newInstance() メソッドのカスタマイズは、現在のメッセージインスタンスのすべての カスタム プロパティーを新しいメッセージインスタンスにコピーすることにフォーカスする必要があります。この MessageSupport.copy() メソッドは、copyFrom() を呼び出すことにより汎用メッセージプロパティーをコピーします。
5
この createBody() メソッドは、MessageSupport.getBody() メソッドと連携して機能し、メッセージボディーへの遅延アクセスを実装します。デフォルトでは、メッセージのボディーは null です。これは、アプリケーションコードが (getBody() を呼び出して) ボディーにアクセスしようとする場合にのみ、ボディーが作成されます。メッセージのボディーに初めてアクセスすると、MessageSupport.getBody() は自動的に createBody() を呼び出します。
6
この populateInitialHeaders() メソッドは、ヘッダー getter および setter メソッドと連携して機能し、メッセージヘッダーへの遅延アクセスを実装します。このメソッドはメッセージを解析して、メッセージヘッダーを抽出し、ハッシュマップ map に挿入します。populateInitialHeaders() メソッドは、ユーザーが (getHeader()getHeaders()setHeader()、または setHeaders() を呼び出すことにより) ヘッダーに初めてアクセスしようとすると自動的に呼び出されます。
7
この populateInitialAttachments() メソッドは、アタッチメントの getter および setter メソッドと連携して機能し、アタッチメントへの遅延アクセスを実装します。このメソッドは、メッセージのアタッチメントを抽出し、ハッシュマップ map に挿入します。populateInitialAttachments() メソッドは、getAttachment()getAttachments()getAttachmentNames()、または addAttachment() を呼び出して、ユーザーが初めて添付ファイルにアクセスしようとすると、自動的に呼び出されます。