2016-07-29 271 views
0

我正在做一个开发,将SOAP请求发送到远程Web服务并使用apache Camel获得响应。向远程Web服务发送SOAP请求并使用apache获取响应Camel

在这种情况下,我使用下面提到的WSD1的cxf-codegen-plugin成功生成了客户端wsdl2java代码。

  • 样品WSDL网址:http://www.webservicex.net/stockquote.asmx?WSDL

,并做一些研究之后,我在下面的示例代码创建发送SOAP请求,在那里定义的Web服务,并使用所产生的获得与Apache骆驼响应客户端代码。

CamelContext context = new DefaultCamelContext(); 

HttpComponent httpComponent = new HttpComponent(); 
context.addComponent("http", httpComponent); 

ProducerTemplate template = context.createProducerTemplate(); 

GetQuote getQuote = new GetQuote(); 
getQuote.setSymbol("test123"); 

GetQuoteResponse getQuoteResponse = template.requestBody("http://www.webservicex.net/stockquote.asmx",getQuote, GetQuoteResponse.class); 

System.out.println(getQuoteResponse); 

但它给出了以下错误。

Caused by: org.apache.camel.InvalidPayloadException: No body available of type: java.io.InputStream but has value: [email protected] of type: net.webservicex.GetQuote on: Message[ID-namal-PC-33172-1469806939935-0-1]. Caused by: No type converter available to convert from type: net.webservicex.GetQuote to the required type: java.io.InputStream with value [email protected] Exchange[ID-namal-PC-33172-1469806939935-0-2]. Caused by: [org.apache.camel.NoTypeConversionAvailableException - No type converter available to convert from type: net.webservicex.GetQuote to the required type: java.io.InputStream with value [email protected]] 

Caused by: org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type: net.webservicex.GetQuote to the required type: java.io.InputStream with value [email protected] 

我在这里错过了什么?数据绑定?还是其他什么?我使用cxf生成客户端代码,因此我如何使用cxf发送此代码?

我只是想发送一个SOAP请求到远程Web服务并获得使用Apache Camel的响应。

  • 骆驼版本:2.9.0
  • Java版本:1.7.x/1.8.x的

回答

2

这将是更好的使用CXF组件此。根据CXF代码的生成方式,您可能只需发送&即可在您的示例中接收字符串而不是对象 - 有关更多信息,请参阅How to tell cxf to keep the wrapper types in methods?

以下是CXF的示例。

CamelContext context = new DefaultCamelContext(); 

CxfComponent cxfComponent = new CxfComponent(context); 
CxfEndpoint serviceEndpoint = 
    new CxfEndpoint("http://www.webservicex.net/stockquote.asmx", cxfComponent); 

// Service class generated by CXF codegen plugin. 
serviceEndpoint.setServiceClass(StockQuoteSoap.class); 

ProducerTemplate template = context.createProducerTemplate(); 

// Request and response can be 'bare' or 'wrapped', see the service class. 
String getQuoteResponse = template.requestBody(serviceEndpoint, "MSFT", String.class); 

System.out.println(getQuoteResponse); 
+0

非常感谢bgossit!它为此工作正常。我有一个问题。如果发送请求主体,如果它需要多个参数。例如:如何为以下类似的调用发送请求参数(messageHeader,securityHeader,sessionCreateRQ)(SessionCreateRS sessionCreateRS = sessionCreatePortType.sessionCreateRQ(messageHeader,securityHeader,sessionCreateRQ); //这是来自JAX-WS) – namalfernandolk

+0

哦,我有一个愚蠢的答案..我只是将它们添加到列表并发送。有效!请分享更好的答案。 – namalfernandolk

相关问题