2013-07-07 69 views
0

我正在評估駱駝在兩個解耦系統之間創建集成。我需要駱駝定期輪詢Web服務以獲取項目列表,對收到的項目進行一些轉換,並使用不同的傳輸將其發送到第二個系統。定期輪詢Apache Camel中的外部Web服務

我嘗試以下方法:

<route id="timer"> 
     <from uri="timer://myTimer?period=5000"/> 
     <to uri="direct:queryWS"/> 
    </route> 
    <route id="ws"> 
     <from uri="direct:queryWS"/> 
     <to uri="log:Querying WS"/> 
     <process ref="itemRetriever" /> 
    </route> 

其中itemRetriever是我以前設立一個bean,它實現org.apache.camel.Processor和不使用Axis Web服務調用。但是,當消息到達第二個路由時,Camel會拋出異常,因爲消息正文爲空。

我想知道是否有更好的方式定期輪詢外部Web服務,或至少如何克服這個錯誤。

+0

兩件事情a)你爲什麼需要把它作爲兩條路線。這可能是一個路線,<從「計時器」..>。<到「日誌:」.. <進程... b)你似乎沒有在路線中設置一個身體,我懷疑你正在試圖採取行動處理器中的消息主體。更多的例外細節將有所幫助 – techuser

+0

您能否詳細說明您的問題?你使用的是什麼版本的駱駝,什麼是堆棧跟蹤等 – AlanFoster

+0

最後,這是一個完全不同的問題。似乎Camel正在將異常封裝在其他異常中,因此由缺少的庫引起的「Class def not found」異常顯示爲「消息正文爲空」。我必須在org.apache.camel.impl.DefaultExchange中設置一個斷點來查看真正的問題 – matei

回答

0

我發現後,駝峯的異常將隱藏在「消息體爲空」下,但問題可能大不相同,並且沒有看到任何堆棧跟蹤會導致原始問題。我不得不一步一步地追蹤代碼,以發現原來的問題是我錯過了依賴關係。

底線是:上面的代碼應該正常工作。如果你看到「消息體是空的」異常,這個問題通常是在不同的層次上。