2016-07-14 9 views
0

我們試圖使用在prod和pre-prod環境中具有不同端點的SOAP服務(在Java應用程序中)。我們使用wsimport生成客戶端代碼,並嘗試使用綁定提供程序覆蓋端點。在運行時替換SOAP端點的問題

綁定提供程序在產品前環境中工作正常(自動生成的代碼來自產品前環境wsdl)但是,當我們嘗試在生產環境中執行測試時,綁定提供程序無法覆蓋端點。 在生產環境中,它會引發「連接失敗,當它試圖連接到預產品」。 我們瞭解到,綁定提供程序需要訪問pre-prod wsdl和prod wsdl來覆蓋端點。由於安全組限制,我們無法從prod訪問proprod wsdl。

我們也嘗試通過在運行時從prod wsdl調用服務來讀取終點,但wsdl中的端口信息被硬編碼爲某個IP地址,並且無法更改並且修復了prod wsdl超出了我們的控制範圍。

在運行時是否有其他方式來覆蓋端點?

回答

0

問題的主要原因是存根具有硬編碼的QA端點。我修改了客戶端存根代碼,從代理生成的代碼中刪除了硬編碼的端點,並且綁定提供程序開始正常工作。所有其他解決方案耗時且需要使用網關服務進行環境級別更改。

0

您可以使用類似於UDDI的解決方案併爲您的SOAP端點保留版本控制,也可以使用網關服務。這種單一服務將在運行時將內部呼叫引導至不同的服務。

我更喜歡UDDI,因爲它具有很大的靈活性。 參考:https://docs.oracle.com/cd/E17904_01/admin.1111/e15867/uddi.htm#OSBAG392

+0

我正在分析UDDI和網關服務的可能解決方案。同時,還有沒有其他來自編碼預期的快速解決方案? 現在我們的應用程序不使用任何網關,並且UDDI過程也需要多個批准,因此只需檢查是否有快速的事情。 – user3452558

+0

您可以參考Axis2源代碼,並檢查它在調用之前如何修改端點。參考這個例子,並檢查Axis2 src代碼:https://axis.apache.org/axis2/java/core/docs/userguide-creatingclients-xmlbeans.html – amitmah

+0

感謝Amitmah的建議。我解決了這個問題。實際上,在自動生成的存根文件中存在一個奇怪的靜態塊和靜態參數,這是主要問題。我們從字面上改變了自動生成的代碼,重新編寫了邏輯,讀了一堆我們沒有使用的構造函數和靜態方法。所以我通過更改自動生成的文件並確保它們在部署中不被替換,找到了更快的方法。但仍然感謝您提出的所有建議,它已經開啓了我將繼續探索的新想法。 – user3452558