首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >柑橘:验证前转换JMS二进制消息

柑橘:验证前转换JMS二进制消息
EN

Stack Overflow用户
提问于 2018-01-08 12:25:27
回答 1查看 393关注 0票数 0

在Citrus中验证JMS二进制消息之前,我希望将它转换为JMS二进制消息。

我发现我可以收到这样的二进制消息

代码语言:javascript
代码运行次数:0
运行
复制
runner.receive(action -> 
action.endpoint("myJmsEndpoint")
            .messageType(MessageType.BINARY)
            .validator(new BinaryMessageValidator())

但是,我必须提供自己的验证器实现(这里是BinaryMessageValidator),而且我正在失去Citrus中可用的消息验证的全部功能。

相反,我希望将消息转换为字符串,然后使用Citrus的普通验证功能。

消息有效负载是一个普通的XML。它只是SUT的一个实现细节,消息以JMS二进制消息的形式发送。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-09 08:20:16

您可以使用二进制base64消息验证器(MessageType.BINARY_BASE64)自动将二进制数据流转换为base64编码的字符串值。然后,预期的消息有效载荷也转换为base64编码的字符串。只需使用encodeBase64 Citrus函数即可:

代码语言:javascript
代码运行次数:0
运行
复制
runner.receive(action -> action.endpoint("myJmsEndpoint")
        .messageType(MessageType.BINARY_BASE64)
        .payload("citrus:encodeBase64('<MyXmlMessage><content>Hello</content></MyXmlMessage>')")

这将对编码的base64字符串值执行纯文本消息验证。

如果您想使用完整的Citrus消息验证器功能,则需要编写一个从com.consol.citrus.validation.xml.DomXmlMessageValidator扩展的自定义消息验证器。在这个自定义验证器中,您只需要自己对接收到的消息执行二进制到XML字符串的转换。你可以这样做:

代码语言:javascript
代码运行次数:0
运行
复制
public class CustomMessageValidator extends DomXmlMessageValidator {

    @Override
    public void validateMessage(Message receivedMessage, Message controlMessage,
        TestContext context, XmlMessageValidationContext validationContext)
        throws ValidationException {

        receivedMessage.setPayload(new String(receivedMessage.getPayload(byte[].class), FileUtils.getDefaultCharset()));

        super.validateMessage(receivedMessage,
            controlMessage, context, validationContext);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48150268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档