2011-11-08 58 views
3

鑑於來自保險絲源的apache-servicemix-4.4.1-fuse-00-08的「cxf-osgi」示例,使用maven 3.0.3構建,當將其部署到apache karaf 2.2.4和CXF 2.4.3時,web服務從不發佈,並且CXF servlet永遠不可見(http:// localhost:8181/cxf /)。卡拉夫日誌中沒有錯誤。如何去調試這種行爲?如何調試CXF端點發布?

+0

更新:使用Blueprint XML而不是Spring XML發佈包可使CXF正常工作。我敢肯定,這不是一個127.0.0.0和0.0.0.0的問題。我將增加日誌記錄並升級到cxf 2.4.4 – chugadie

回答

3

這是值得關注的日誌級別 - 您可以在etc/org.ops4j.pax.logging.cfg或在控制檯log:set TRACE org.apache.cxf - IIRC永久性地執行此操作 - 這將顯示一些有用的信息。

還要檢查它是否在本地主機/ 127.0.0.1上發佈 - 它可能會在另一個接口上發佈,即本地網絡的IP,但不是本地主機的IP。嘗試使用0.0.0.0作爲地址,這樣它將綁定到所有可用的接口。

當您使用maven時,您可以下載CXF源代碼(在Eclipse中很容易),並將遠程調試器連接到Karaf實例,通過一些戰略性佈局的斷點,您應該能夠掌握正在發生的事情。

+0

不幸的是,我沒有一個IDE來進行逐步調試,並且增加了日誌記錄沒有提供任何有用的信息。 – chugadie

2

嘗試更改爲Equinox而不是Felix的默認值。 2.4.3中有一個錯誤,它與Felix不兼容。或者,CXF 2.4.4現在也可以修復它。

0

看看這個問題,我在本週提交:https://issues.apache.org/jira/browse/CXF-4058

我發現那是什麼,如果我的beans.xml是CXF包JAR之前加載,那麼端點與CXF註冊,但不與OSGi http服務。所以從日誌中看起來一切都很好,但終端永遠不可訪問。這是一個競賽條件。

我做了兩個解決方法:1)在短期內,稍後在引導順序(我使用Karaf功能)中移動我自己的罐子,以便Spring和CXF在我的beans.xml被讀取前完全加載並且2)放棄春推出這種方法基於鬆散的我自己綁定代碼:http://eclipsesource.com/blogs/2012/01/23/an-osgi-jax-rs-connector-part-1-publishing-rest-services/

我剛剛實施的解決方案#2昨天我已經與它非常高興。它解決了我所有的類加載器問題(之前我不得不手動添加大量的Import-Package行,因爲BND沒有看到beans.xml引用)並修復了我的引導競爭條件。