2011-06-07 56 views
2

我有一個最後的障礙來解決我正在使用的Web服務應用程序;我需要能夠覆蓋用於在生成的WSDL文件中設置模式位置和soap地址位置的默認設置。Java Web服務 - 定義服務器位置

當我部署應用程序(GlassFish v2.1在Red Hat Linux上)時,它使用URL中的本地服務器名稱,但它需要使用公有域名。我能夠在本地保存WSDL文件,更改URL,公開它,從文件外部生成一個測試應用程序,並且最終能夠成功運行測試。

我現在已經進入了JAX-WS自定義綁定的領域,但我希望我忽略了一個更簡單的解決方案,或者綁定不像第一眼那樣複雜。 Web服務實現是通過無狀態的EJB(例如下面的MyWS.java)。生成的WSDL文件看起來像MyWSDL.wsdl(見下文)。

在XSD:進口標籤,我需要的schemaLocation更改爲

http://test.mycompany.com/MyWSService/MyWS?xsd=1 

,而不是

http://local-server-name/MyWSService/MyWS?xsd=1 

,並在肥皂:地址標籤,我需要改變位置是

http://test.mycompany.com/MyWSService/MyWS 

而不是

http://local-server-name/MyWSService/MyWS. 

MyWS.java

@WebService(name="MyWS", 
     portName="MyWSPort", 
     serviceName="MyWSService", 
     targetNamespace="http://test.mycompany.com/") 
@Stateless() 
public class MyWS { 

    @WebMethod(operationName="testLogin") 
    public String testLogin(@WebParam(name="username") String username, 
      @WebParam(name="password") String password) { 
     String retVal = "Test Failed."; 

     //do some stuff 

     return retVal; 
    } 

    ... 
} 

MyWSDL.wsdl

<definitions targetNamespace="http://test.mycompany.com/" name="MyWSService"> 

    <types> 
    <xsd:schema> 
     <xsd:import namespace="http://test.mycompany.com/" schemaLocation="http://local-server-name/MyWSService/MyWS?xsd=1"/> 
    </xsd:schema> 
    </types> 

    <service name="MyWSService"> 
    <port name="MyWSPort" binding="tns:MyWSPortBinding"> 
     <soap:address location="http://local-server-name/MyWSService/MyWS"/> 
    </port> 
    </service> 
</definitions> 
+0

我不是粗魯的,但這是一個問題嗎?它以「我有一個最後的障礙......」開始。我們都應該知道你想要實現什麼?它看起來有點像我想要做的事情(這就是我如何到這裏),但因爲它是這個問題是社區很沒用 – jambriz 2014-09-09 16:10:20

+0

我不是粗魯,但這是一個有用的評論?它開始時帶有暗示,我們都應該知道你爲什麼要發佈?這聽起來有點像你需要幫助(這就是我得到的),但就此評論而言,這對社區來說是無用的。如果您確實找到了針對您的問題的答案,則可以將其發佈到此處,以供出於同樣原因可能在本頁找到自己身份的大量其他人員使用。 – John 2016-06-07 20:56:47

回答

0

你是如何生成WSDL?你是用手產生的嗎?您是否使用帶-wsdl選項的wsgen生成它?

如果您使用JAX-WS進行部署,則實際上不應該執行其中的任何一項。相反,你應該能夠去......

<SERVER_URL>/<CONTEXT_LOCATION>/<SERVLET_URL>?wsdl 

...和JAX-WS servlet將自動生成與正確的位置飛一個WSDL。

+0

對不起,我沒有說清楚... WSDL文件正在生成。 – John 2011-06-08 11:15:41

2

我能夠通過更改GlassFish HTTP服務的配置來解決問題。我將服務器的別名設置爲test.mycompany.com:80,用於Web服務應用程序使用的HTTP偵聽器。通常我們在我們的Web服務器中有這種配置,所以最初我甚至沒有考慮應用服務器配置。