【问题标题】:How to setHeader in Camel Test如何在骆驼测试中设置标题
【发布时间】:2020-07-10 04:19:05
【问题描述】:

我正在处理一项任务,我在其中一个处理器中设置了标题。

exchange.getIn().setHeader("ResourceSpec", equipmentSpec.getSpec());

在编写测试用例时,它期望值。因为测试用例失败了。

模拟路由测试:

void advice(@Observes CamelContextStartingEvent event, CamelContext context) throws Exception {

    context.getRouteDefinition(test.update)
           .adviceWith(context, new AdviceWithRouteBuilder() {
               @Override
               public void configure() {           
                   weaveByToString(".*lineInquiryBy.*")
                       .replace()
                       .to("mock:lineInquiry");
               }
           });

需要帮助在模拟中设置标题。这样在执行时,处理器就可以获取到值。

使用 camel-test 和 camel-test-cdi。

谢谢

【问题讨论】:

    标签: apache-camel apache-camel-cdi


    【解决方案1】:

    不确定我是否理解您的问题。我的理解:

    1. 你有一个处理器来设置标题ResourceSpec
    2. 您有一个测试从路由中删除带有adviceWith 的处理器
    3. 因此,由于未设置标头 ResourceSpec,因此后续路由步骤失败

    如果我理解你的问题是正确的,你可以简单地“插入”setHeader 你移除处理器的地方

    weaveByToString(".*lineInquiryBy.*")
        .replace()
        .to("mock:lineInquiry")
        .setHeader("ResourceSpec", constant("static value"));
    

    如果您需要动态值(例如来自消息头),您可以使用Camel Simple 表达式语言:

    .setHeader("ResourceSpec", simple("${header.myHeader}"));
    

    【讨论】:

    • 我以同样的方式尝试过......但它抛出了错误。
    • 1) setHeader(String name), 2) setHeader(String name, Expression expression), 3) setHeader(String name, Supplier Supplier)...有我可以看到的选项它在建议中。
    • 对不起,我的错。我用两个表达式示例更新了我的答案。一个具有静态值,应用constant。还有一个动态值取自消息头,应用simple
    • @burki..Thanks..i 在 getHeader() 之前的一行出现异常
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多