2012-05-25 60 views
0

我正在使用CXF來生成WSDL,其中Java和Tomcat作爲應用程序容器。我遇到了wsdl導入位置不包含ssl鏈接版本的問題。這裏的例子:使用CXF和Tomcat的WSDL導入位置

<wsdl:import location="http://api.test.com/soap_admin?wsdl=AdminApi.wsdl" namespace="http://admin.test.com"></wsdl:import> 

應該是(我知道如何更改命名空間價值,只是沒有位置值):

<wsdl:import location="https://api.test.com/soap_admin?wsdl=AdminApi.wsdl" namespace="https://admin.test.com"></wsdl:import> 

我也有在前面的負載平衡器是做SSL認證然後重定向到它後面的兩臺不同服務器中的一臺。 WSDL能夠被拉出來沒有問題,但爲了一致起見,位置字段需要https。

另外我也看到堆棧溢出的其他問題是半相同的事情,但沒有什麼是確切的。例如此鏈接:

specify location in wsdl:import

但這是WCF堆棧上做,是不是我用的什麼都沒有。另外我的直覺告訴我它簡單的CXF或Tomcat配置更改。如果我將它部署在我的一個不使用SSL的開發服務器上以便不包含https,那麼它對於它來說也是很好的。

請指教!

回答

0

通過添加另一個連接器端口,以我的server.xml配置爲Tomcat 7修復了這個:

<Connector port="8081" maxHttpHeaderSize="8192" 
maxThreads="300" minSpareThreads="25" maxSpareThreads="75" 
enableLookups="false" redirectPort="8443" acceptCount="100" 
connectionTimeout="20000" scheme="https" proxyPort="443" proxyName="your.frontend.address" disableUploadTimeout="true" /> 

而且@Donal,我基本上是定義如何,現在連接到這個tomcat的兩個版本。我剛剛列出的代碼將我的負載平衡器指向,然後對於內部用戶,我仍然定義了一個8080連接器端口。顯然,可以根據需要調整該配置。你的解決方案當然有效,但仍然有相當不成熟的產品,我不想一直這樣做。

我原本以爲這是一個CXF問題,但結果證明它是一個tomcat配置更改。

0

我總是嘗試保留從生成源代碼的WSDL文檔的本地副本,這樣如果服務恰好暫時關閉,我的構建不會失敗。是的,這意味着服務位置不正確,但這很容易通過設置服務器對象的屬性來修復,就像設置用戶名和密碼一樣。 (當然,如果有服務API更改,我可能需要更改很多代碼。)一旦保留本地副本,只需將<wsdl:import location=… />設置爲本地路徑(使用文本編輯器!在代碼生成完成後使用的位置不會

試圖從實時服務生成源代碼是一個整潔的想法,除了它真的很吸引大多數部署。製作副本,提高構建可靠性,減少擔心(或至少關於其他事情)。