我有一个关于 Camel 路由的基本问题。假设我有以下路线:
from(amq:MyQueue).process("jmsToHttp4").to("http4://dummyhost:8080").to("file://out/MyFolder");
假设 http4-Response 只是一个字符串“您的响应”。据我了解文档,可以通过以下方式检索“您的回复”:
exchange.getOut().getBody()
假设我只想写“file://out/MyFolder”,前提是响应包含“Response”这个词。我怎样才能做到这一点?
还有一个问题: 如果我想在 spring 环境中编写一个测试,我如何用“你的响应积极测试”和“你的消极测试”来模拟响应?不知何故,我需要能够在 exchange.out.body 中写入响应字符串,对吗?
谢谢,
哈迪
答案 0 :(得分:0)
一种选择是在 HTTP 调用之后立即声明一个 .filter(body().contains("Response"))
。
至于测试,您可以使用模拟组件,该组件为您提供处理交换的方法,并在消息到达模拟端点时断言您需要的任何内容。
实际上有一些替代测试......我习惯于在属性文件中声明端点并使用类中的键,例如.to("{{my.http.target}}")
。因此,在这种情况下,在测试环境(专用属性文件)中,您将使用模拟替换 http4。
在我看来,它更简洁,在编写测试时需要更少的上下文控制,主要是在大型/复杂的应用程序中。另一方面,这可能会影响代码的可读性。
但是,如果您希望在 Java 类中保留声明,则必须在测试环境中拦截 http4 调用,然后将其转移到您的模拟端点。
希望对你有帮助。