如何从camel rest java DEL调用soap web服务

时间:2017-03-23 10:49:20

标签: rest soap apache-camel

我正试图从java DSL调用来自camel rest的soap web服务。但使用500响应代码获取服务器错误。

我将接收来自休息时使用json数据的电话,我必须拨打第三方肥皂服务,我还需要处理肥皂响应并在json formate中发回响应。

这是我的代码

{
String getCustomerDetailsurl="http://<serverip>/webservice/Service.asmx?op=GetClientDetail&bridgeEndpoint=true";

rest("/customers")
.description("Aviva Mobile  sales customer service")
.consumes("application/json")
.produces("application/json")
 .post().type(ClientRequest.class) // incomming request data
 .route()
 .from("direct:start")
 //.setHeader(Exchange.HTTP_METHOD, constant("POST"))
  .process(new CustomerProcessor()).marshal().xstream()
.to(getCustomerDetailsurl);

错误

org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking http://<serverip>/webservice/Service.asmx?op=GetClientDetail with statusCode: 500
       at org.apache.camel.component.http.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:239) ~[camel-http-2.17.5.jar:2.17.5]
       at org.apache.camel.component.http.HttpProducer.process(HttpProducer.java:161) ~[camel-http-2.17.5.jar:2.17.5]
       at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) ~[camel-core-2.17.5.jar:2.17.5]
       at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145) ~[camel-core-2.17.5.jar:2.17.5]
       at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) ~[camel-core-2.17.5.jar:2.17.5]
       at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468) ~[camel-core-2.17.5.jar:2.17.5]

}

1 个答案:

答案 0 :(得分:0)

  1. 您必须查看服务器端的实际错误。
  2. 您可以使用某些工具(如tcp monitor(tcpMon))来查看您发送的内容以及您收到的内容。
  3. 实际上,要使用SOAP服务,最好使用SOAP客户端,而不是通过http进行原始调用。看看Camel-CXF组件。然后创建一个CXF端点并在.to({cxfEndpointUri})中使用它。 CXF将为您完成所有SOAP工作。也许你需要在它的拦截器中做一点工作,比如服务器需要它的授权。
  4. P.S。在您的代码中,您的CustomerProcessor生成什么样的Exchange.body?它对服务器SOAP信封有效吗?它的合同(WSDL)是否具有服务器所需的全部内容?