Citrus:在验证之前转换 JMS 二进制消息
Citrus: Convert JMS binary message before validation
我想转换 JMS 二进制消息然后在 Citrus 测试用例中验证它。
我发现我可以接收这样的二进制消息
runner.receive(action ->
action.endpoint("myJmsEndpoint")
.messageType(MessageType.BINARY)
.validator(new BinaryMessageValidator())
但是,我必须提供我自己的验证器实现(此处 BinaryMessageValidator
),我将失去 Citrus 中可用的消息验证的全部功能。
相反,我想将消息转换为字符串,然后使用 Citrus 的正常验证功能。
消息负载是正常的 XML。消息作为 JMS 二进制消息发送只是 SUT 的一个实现细节。
谢谢
您可以使用二进制 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);
}
}
我想转换 JMS 二进制消息然后在 Citrus 测试用例中验证它。
我发现我可以接收这样的二进制消息
runner.receive(action ->
action.endpoint("myJmsEndpoint")
.messageType(MessageType.BINARY)
.validator(new BinaryMessageValidator())
但是,我必须提供我自己的验证器实现(此处 BinaryMessageValidator
),我将失去 Citrus 中可用的消息验证的全部功能。
相反,我想将消息转换为字符串,然后使用 Citrus 的正常验证功能。
消息负载是正常的 XML。消息作为 JMS 二进制消息发送只是 SUT 的一个实现细节。
谢谢
您可以使用二进制 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);
}
}