44.2. 实施消息接口
如何实现自定义消息
例 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 ()
方法结合使用,以实施对消息正文的 lazy 访问权限。默认情况下,邮件正文为null
。只有在应用程序代码试图访问正文(通过调用getBody ()
)访问应创建正文时,才会生效。当消息正文首次访问时,MessageSupport.getBody ()
会自动调用createBody ()
。- 6
populateInitialHeaders ()
方法可与标头 getter 和 setter 方法一起工作,以实施对消息标头的 lazy 访问。此方法解析消息以提取任何消息标头并将其插入到哈希映射中
,映射。当用户第一次试图访问标头(或标头)时,会自动调用populateInitialHeaders ()
方法(通过调用getHeader ()
,getHeaders ()
,setHeader ()
, 或setHeaders ()
)。- 7
populateInitialAttachments ()
方法与附件 getter 和 setter 方法协同工作,以实施对附件的 lazy 访问。此方法提取消息附加并将其插入到散列映射
中。当用户第一次尝试通过调用getAttachment ()
、getAttachment ()、getAttachmentNames ()
或addAttachment ()
时,会自动调用populateInitial
方法。Attachments
()