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
- populate
InitialHeaders()
メソッドはヘッダー getter および setter メソッドと連携して機能し、メッセージヘッダーへの遅延アクセスを実装します。このメソッドは、メッセージヘッダーを抽出し、ハッシュマップに挿入するメッセージを解析し、をマップします。ユーザーが(getHeader
()、getHeaders()、set
自動的に呼び出されます。Header()、または
で)初めてヘッダー(またはヘッダー)set
Headers()を呼び出すことにアクセスしようとすると、populateInitial
Headers(
)メソッドが - 7
- populate
InitialAttachments()
メソッドは添付の getter および setter メソッドと連携して機能し、アタッチメントへの遅延アクセスを実装します。このメソッドは、メッセージのアタッチメントを抽出し、ハッシュマップmap
に挿入します。populateInitialAttachments()
メソッドは、getAttachment()
、getAttachments()
、getAttachmentNames()
、またはaddAttachment()
を呼び出して、ユーザーが初めて添付ファイルにアクセスしようとすると、自動的に呼び出されます。