2013-04-04 94 views
0

我的環境的前提編碼:我在春天3運行使用彈簧WS處理所有SOAP要求。我已經與多家供應商進行了多次整合,沒有出現任何問題。RPC /與JAXWS

問題:這個最近的集成有一個供應商運行真正古老的東西,他們的WSDLs使用rpc綁定樣式。不用說JAXWS並不完全支持rpc(因爲它是interop的對立面,所以這是正確的)。

可能的解決辦法#1:我仍然可以嘗試生成使用Axis 1.其實我已經做到了這一點,但我非常非常不願意引入軸依賴到我的POM他們的WSDL的存根。我很確定會有大量的圖書館衝突,可能會混淆當前非常穩定的環境。

可能的解決方案#2:我可以嘗試將他們的WSDL重寫爲JAXWS能夠解析的文檔/文本。運行了一些問題實際上重寫的WSDL(獲得「架構描述符{} XXX XXX在消息部分‘XXX’是沒有定義,無法綁定到Java」)。除此之外,如果他們的終端專門檢查rpc,我就會被搞砸了。

可能的解決方案#3:我可以部署一個全新的運行Axis和此服務客戶端的盒子。即主項目使REST調用這個框,這個框會發出SOAP請求並解析響應。看起來像一個非常非常愚蠢的方式(和一些簡單的工作荒謬的工作量)去做這件事。

的任何解決方案,我已經錯過了?此外,我一直在爲此搜索谷歌,雖然有些人在第一名中取得了成功,但沒有人真正談論此後的後果。 (即處理軸的傳統依賴,試圖使軸在春季3發揮好,等)

回答

0

#1

的一種方式,使#1更穩定是讓自己軸心國的本地副本您將使用這些源來構建您自己的Axis jar(s)副本。但是你改變了整個事物的包裝。例如,取而代之的是org.apache.axis,它變成了com.mycompany.org.apache.axis,翻譯變得非常機械。

然後,軸1的任何依賴關係(如老版本的公地BeanUtils的,也許)將得到同樣的待遇。加載他們的罐子。用你自己的定製包裝構建他們的罐子。 (如果他們用Maven構建,確定的依賴是比較容易。)

這樣做不會犧牲納入更新和修復到原來的Axis代碼的能力,一些努力。任何發佈的更新成爲一組,你必須弄清楚如何融入你的本地副本中每個java文件有改動packageimports線的變化。

#2

說不上約#2。它是一骰子,不是嗎。

#3

你在做什麼在#3是ESB是什麼在真正的好。 3號是你自己寫迷你翻譯器的地方。我已經完成了,它工作得很好。

但是你實際上可以在同一個盒子上構建第3步。你不需要另一個盒子。您將小翻譯器應用程序部署爲主端口上運行的獨立應用程序。您可以將應用程序部署在不同的端口上或作爲不同的URL /路徑。翻譯器應用程序使用Axis1並轉換傳入的消息,將其傳遞並將響應轉換回來。

該解決方案的一個好處是,它可以像處理一個應用程序一樣處理負載平衡。翻譯器應用程序和主應用程序一起使用它們共享的cpu週期桶。如果您需要更多,請添加更多設置完全相同的服務器。

+0

感謝您的評論李。 #1不確定你的意思。通過Axis的WSDL2Java生成的存根固有地擴展了Axis特定的對象。例如,所有服務都從org.apache.axis.client.Service繼承。您是否建議我在源代碼庫中包含所有的Axis源代碼並重構它們,而不是將Axis作爲Maven依賴項? – Michael 2013-04-04 18:30:16

+0

#3是的,我聽到你,我的一個壞的術語。我並不是指像物理盒子那樣的盒子,而是一個單獨的邏輯上下文和一個不同的已部署應用程序。可以坐在相同的盒子上,雖然這是一個不同的蠕蟲罐,因爲我與許多盒子聚集在一起。 ESB聽起來像一個巨大的矯枉過正! – Michael 2013-04-04 18:31:48

+0

是的,我的意思是建立你自己的Axis jar,稍做修改以適應軟件包,Axis源代碼的副本。不要將它完全混入你自己的源代碼中。我已經看到,在Weblogic或WebSphere等其他用戶希望使用第三方jar的情況下,這種方式取得了良好的效果,但不希望其版本與其客戶所需的版本衝突。新Websphere使用OSGI以不同的方式避免這個問題。 – 2013-04-04 18:35:22