骆驼:java.lang.IllegalArgumentException:必须指定defaultEndpoint

时间:2018-12-12 10:38:01

标签: java apache-camel illegalargumentexception

我是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)

2 个答案:

答案 0 :(得分:4)

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

后一种情况将仅设置一个单个标头值,而键为第二输入参数,其值为第三参数。另外,由于未提供端点信息,因此它将回退到默认端点,这将解释您所看到的错误。

答案 1 :(得分:1)

我不确定我为什么不这样做,对我来说还好。作为测试,您可以尝试拆分端点,看看是否可行?

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

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