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() 方法以自定义消息字符串ification。
4
newInstance() 方法从 MessageSupport.copy() 方法中调用。自定义 newInstance() 方法应该侧重于将当前消息实例的所有自定义属性复制到新消息实例中。MessageSupport.copy() 方法通过调用 copyFrom() 来复制通用消息属性。
5
createBody() 方法与 MessageSupport.getBody() 方法配合使用,以实施对消息正文的 lazy 访问权限。默认情况下,消息正文为 null。只有在应用程序代码试图访问正文(调用 getBody())时,才应创建正文。当第一次访问消息正文时,MessageSupport.getBody() 会自动调用 createBody()
6
populateInitialHeaders() 方法与标头 getter 和 setter 方法配合使用,以实施对消息标头的 lazy access。此方法解析消息以提取任何消息标头,并将它们插入到散列映射中。当用户首次尝试访问标头(或标头)时(调用 getHeader()、getHeaders()、setHeaders()set Headers() )时,会自动调用 populate InitialHeaders()
7
populateInitialAttachments() 方法与附件 getter 和 setter 方法配合使用,来实现对附件的访问。此方法提取消息附件,并将它们插入到散列映射中。当用户首次通过调用 getAttachment()、getAttachment() 或 addAttachment()时,会自动调用 populateInitial Attachment s() addAttachment()