搜索

44.2. 实施消息接口

download PDF

如何实施自定义消息

例 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 ()、getAttachments ()getAttachment ()addAttachment () 第一次尝试访问附件(或附件)时,会自动调用 populateInitialAttachments () 方法。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.