我在路线中使用了recipientList标签,如下所示。 bean findCallbackUrl将返回一个String,它是我的目标地址。即我将向此端点发出POST请求。例如,我可能有一个服务器在http://localhost:8080/acceptcallbacks收听。
<recipientList>
<method ref="findCallbackUrl"/>
</recipientList>
因此,当从findCallbackUrl bean返回的String(destination)是jetty:http://localhost:8080/acceptcallback时,POST工作正常。
然而,当使用Camel-jetty component中提到的某些选项时,会出现问题。当返回的目的地是jetty:http://localhost:8080/acceptcallbacks?enableJmx=false或jetty:http://localhost:8080/acceptcallbacks?disableStreamCache=false时,POST工作正常。但是,如果返回的字符串是jetty:http://localhost:8080/acceptcallbacks?chunked=false,则调用将成为GET请求。
不确定这里发生了什么。如果Camel-jetty选项不以上面使用的方式使用,对于选项enableJmx或disableStreamCache或其他一些选项,生成的目标URL应该是http://localhost:8080/acceptcallbacks?enableJmx=false,这是一个GET请求。
可以将chunked = false用于生产者和消费者端点,还是仅用于消费者端点?
答案 0 :(得分:0)
jetty 中http方法的选择取决于骆驼交换的In Body或CamelHttpMethod
标题。
查看课程org.apache.camel.component.http.helper.HttpHelper
的源代码,方法createMethod
:
public static HttpMethods createMethod(Exchange exchange, HttpEndpoint endpoint, boolean hasPayload) throws URISyntaxException {
// compute what method to use either GET or POST
HttpMethods answer;
HttpMethods m = exchange.getIn().getHeader(Exchange.HTTP_METHOD, HttpMethods.class);
if (m != null) {
// always use what end-user provides in a header
answer = m;
} else if (hasPayload) {
// use POST if we have payload
answer = HttpMethods.POST;
} else {
// fallback to GET
answer = HttpMethods.GET;
}
return answer;
}
现在看看在org.apache.camel.component.jetty.JettyHttpProducer
课程中调用此方法:
HttpMethods methodToUse = HttpHelper.createMethod(exchange, getEndpoint(), exchange.getIn().getBody() != null);
恕我直言选项并不重要。在请求HTTP之前检查exchange.getIn().getBody()
,或者您可以重置标头CamelHttpMethod
。