apache camel - 调用外部Web服务

时间:2014-01-09 03:20:26

标签: web-services rest exception apache-camel

我想将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&amp;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客户端启动请求时,它工作正常。任何帮助将不胜感激。

2 个答案:

答案 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&amp;param2=param2value</constant>
</setHeader>

或用于添加HTTP路径参数使用

<setHeader headerName="CamelHttpPath">
 <constant>/param1/20</constant>
</setHeader>