2016-07-29 173 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

相關問題