我想将http帖子发送到我需要呼叫的外部网络服务。
<from uri="cxfrs://http://localhost:9876?resourceClasses=MyResource"/>
<log message="Received. " loggingLevel="INFO" logName="MyLogger"/>
<setHeader headerName="CamelHttpMethod">
<constant>POST</constant>
</setHeader>
<setHeader headerName="Content-Type">
<constant>application/json</constant>
</setHeader>
<setBody>
<simple>param1=param1value&param2=param2value</simple>
</setBody>
<to uri="http://samplesample.com?bridgeEndpoint=true" />
<log message="body is ${body}" loggingLevel="INFO" logName="MyLogger"/>
我得到了一个例外:
Caused by: org.apache.camel.component.http.HttpOperationFailedException: HTTP operation failed invoking http://samplesample.com with statusCode: 400
使用rest客户端启动请求时,它工作正常。任何帮助将不胜感激。
答案 0 :(得分:2)
camel-cxfrs使用者会将REST请求转换为方法调用,因此camel-http生成器可能无法正确解释该消息。
如果您想使用camel代理REST请求,您可以使用camel-jetty组件来执行此操作。
from("jetty://http://localhost:9876?matchOnUriPrefix=true")
.to("http://samplesample.com?throwExceptionOnFailure=false&bridgeEndpoint=true");
答案 1 :(得分:0)
您应该设置相应的标头,而不是将请求参数放到邮件正文中,例如用于添加HTTP查询参数使用
<setHeader headerName="CamelHttpQuery">
<constant>param1=param1value&param2=param2value</constant>
</setHeader>
或用于添加HTTP路径参数使用
<setHeader headerName="CamelHttpPath">
<constant>/param1/20</constant>
</setHeader>