我是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)
答案 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”端点可能会出现问题(即,如果尚未初始化使用方, “直接”端点可能不存在)