2016-01-28 52 views
1

我有兩個webservices。基本上,我們需要一個輸入字符串,並返回一個xml文檔。第二個從第一個獲取xml並返回一個xml文檔。我對第二份文件感興趣。使用駱駝的webservices鏈條

美中不足的是,我不能修改這些web服務反正是如何工作的,以及輸入參數的URL是內部被髮送

(它不要求身體內部工作)所以基本上,我想調用一個輸入=正文(這是工作)的Web服務。然後我想調用第二個webservice,第一個返回input = body。

這裏是我的駱駝配置:

<route> 
    <from uri="direct:language-identifier" /> 
    <toD uri="http://opener.olery.com/language-identifier?input=${body}&amp;bridgeEndpoint=true"/> 
</route> 

<route> 
    <from uri="direct:tokenizer" /> 
    <setHeader headerName="input"><simple>${in.body}</simple></setHeader> 
    <toD uri="http://opener.olery.com/tokenizer?bridgeEndpoint=true"/> 
</route> 

<route> 
    <from uri="servlet:opener-preparse"/> 
    <pipeline> 
     <to uri="direct:language-identifier"/> 
     <to uri="direct:tokenizer"/> 
    </pipeline> 
</route> 

我的問題是:

  • 當我使用TOD在第二web服務傳遞的輸入參數,我得到一個無效字符(可能是因爲該數據包含新行)

  • 當我使用setheader就像在前面的配置中,第二個服務的輸入是從初始數據(不是由第一個web服務返回的數據)

我該如何解決它?

回答

1

要更換初始路徑體與來自Web服務調用的返回值,確保空航線體之前調用Web服務:

<camel:setBody> 
    <camel:simple>${bodyAs(null)}</camel:simple> 
</camel:setBody> 
<toD uri="http://your-web-service"/> 
+0

這沒有奏效。現在與NullPointerException交換失敗。真的沒有辦法像這樣做兩個Web服務的愚蠢鏈? – Atrakeur

+0

在Web服務端點中使用通配符時,例如$ {body},將您的body轉換爲標頭,然後將其設置爲null並將通配符更改爲$ {header}。 –

0

這幫助了我很多,有同樣的問題=> org.apache.camel.InvalidPayloadException - 沒有可用的主體類型:java.io.InputStream,但具有值:....

它期望一個字符串,但在正文中沒有Pojo。其他解決方案是=>

 <setBody> 
      <simple>${header.myValue}</simple> 
     </setBody> 

     <!-- aufrug dokmanager --> 
     <toD uri="myUrl/cxf/myService/operation?parama1=${body}&amp;param2=someVaue" />