【问题标题】:Camel: java.lang.IllegalArgumentException: defaultEndpoint must be specifiedCamel:java.lang.IllegalArgumentException:必须指定 defaultEndpoint
【发布时间】:2018-12-12 10:38:00
【问题描述】:

我是 Apache Camel 的新手。我正在尝试将标头与请求正文一起发送到 Apache Camel 中的路由。

// headers is a map
APIResponse response = (APIResponse) producer.requestBodyAndHeader("direct:route1",body,headers);

我收到以下错误:

java.lang.IllegalArgumentException: defaultEndpoint must be specified
    at org.apache.camel.util.ObjectHelper.notNull(ObjectHelper.java:308)
    at org.apache.camel.impl.DefaultProducerTemplate.getMandatoryDefaultEndpoint(DefaultProducerTemplate.java:462)
    at org.apache.camel.impl.DefaultProducerTemplate.requestBodyAndHeader(DefaultProducerTemplate.java:289)

【问题讨论】:

    标签: java apache-camel illegalargumentexception


    【解决方案1】:

    您可能混淆了实际调用的方法。如果您的消息正文实际上是String 类型,您最有可能调用template.requestBodyAndHeader(Object, String, Object),而不是调用您实际打算调用的template.requestBodyAndHeaders(String, Object, Map<String, Object>)

    后一种情况只会设置一个标头值,键是第二个输入参数,其值是第三个参数。同样,由于没有给出端点信息,它会回退到默认端点,这将解释您看到的错误。

    【讨论】:

    • 注意复数和单数的方法名! requestBodyAndHeaders vs. requestBodyAndHeader 我们只是在同一个问题上花了 1 小时,因为我们是盲目的 :-)
    【解决方案2】:

    我不知道为什么这不起作用,对我来说看起来没问题。作为测试,您可以尝试拆分端点并查看它是否有效?

    Endpoint endpoint = context.getEndpoint("direct:route1");
    producer.setDefaultEndpoint(endpoint);
    producer.requestBodyAndHeader(body,headers);
    

    您可以测试的另一件事是尝试“seda”而不是“direct”,因为如果您以有趣的顺序加载组件(即如果消费者尚未初始化,则“直接”端点可能不存在)

    【讨论】:

    • 感谢您的回复,我在提出问题之前尝试过,但没有帮助。
    猜你喜欢
    • 2017-04-02
    • 1970-01-01
    • 2018-11-19
    • 2018-05-16
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 2017-05-13
    相关资源
    最近更新 更多