2014-01-09 111 views
0

我想发送一个http post到外部web服务,我需要调用。apache camel - 调用外部web服务

<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 

当我启动使用其他客户端的请求,它工作正常。任何帮助将不胜感激。

+0

那么根据错误你是不是发送正确的语法。下载wireshark对其他客户端调用和骆驼呼叫进行数据包嗅探并进行比较。我相信这两个电话是不同的,你需要找出原因。 – Namphibian

回答

2

camel-cxfrs消费者会将REST请求转变为方法调用,因此骆驼http生产者可能不会正确解释消息。

如果您想通过使用camel代理REST请求,那么您可以使用camel-jetty组件来执行此操作。

from("jetty://http://localhost:9876?matchOnUriPrefix=true") 
        .to("http://samplesample.com?throwExceptionOnFailure=false&bridgeEndpoint=true"); 
0

而不是将您的请求参数放到邮件正文中,您应该设置适当的标题,例如,添加HTTP查询参数使用

<setHeader headerName="CamelHttpQuery"> 
<constant>param1=param1value&amp;param2=param2value</constant> 
</setHeader> 

或添加HTTP路径参数使用

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