Citrus:在验证之前转换JMS二进制消息

时间:2018-01-08 12:25:27

标签: jms citrus-framework

我希望在Citrus测试用例中验证它之前转换JMS二进制消息

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

runner.receive(action -> 
action.endpoint("myJmsEndpoint")
            .messageType(MessageType.BINARY)
            .validator(new BinaryMessageValidator())

但是,我必须提供自己的验证器实现(此处为BinaryMessageValidator),我将失去Citrus中可用的消息验证的全部功能。

相反,我想将消息转换为字符串,然后使用Citrus的正常验证功能

消息有效负载是普通的XML。它只是SUT的实现细节,消息作为JMS二进制消息发送。

由于

1 个答案:

答案 0 :(得分:1)

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

runner.receive(action -> action.endpoint("myJmsEndpoint")
        .messageType(MessageType.BINARY_BASE64)
        .payload("citrus:encodeBase64('<MyXmlMessage><content>Hello</content></MyXmlMessage>')")

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

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

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);
    }
}