簡體   English   中英

CXF代碼優先服務,WSDL生成; 肥皂:地址變更了嗎?

[英]CXF code first service, WSDL generation; soap:address changes?

我有一個通過CXF公開的簡單Java接口/實現。 我的Spring配置文件中有一個jaxws元素,如下所示:

<jaxws:endpoint id="managementServiceJaxws"
            implementor="#managementService" address="/jaxws/ManagementService" >
</jaxws:endpoint>

它從我帶注釋的界面生成WSDL並公開該服務。 然后,當我點擊http:// myhostname / cxf / jaxws / ManagementService?wsdl時,我得到了一個可愛的WSDL。 在wsdl:service元素的底部,我將看到

<soap:address location="http://myhostname/cxf/jaxws/ManagementService"/>

但是,一天左右的某個時間后,如果沒有重新啟動應用程序,則擊中相同的URL會產生:

<soap:address location="http://localhost/cxf/jaxws/ManagementService"/>

這會導致許多問題,但是我真正想要的是修復它。 現在,Web服務有一個特定的客戶端將端點設置為localhost。 因為它在同一台計算機上運行。 wsdl是否有可能被重新生成並緩存,然后公開“ localhost”版本? 在某種程度上,我不知道從CXF中的?wsdl請求到響應的確切機制。 似乎幾乎可以確定它正在獲取某個緩存的版本,因為它應該通過詢問servletcontainer(Jetty)來確定地址。

作為參考,我知道一個權宜之計的解決方案是在客戶端上使用主機名,並確保使用適當的別名,以便它可以通過環回。

編輯:作為參考,我確認是否啟動了我的應用程序,並首先通過本地主機將其命中,然后通過主機名查詢wsdl將地址顯示為本地主機。 相反,首先在主機名上單擊它會導致localhost請求顯示主機名。 因此,很明顯這里緩存了一些內容。

EDIT2:我認為問題可能是OsgiServletController,因為有一種方法:

    private synchronized void updateDests(HttpServletRequest request) {
    if (disableAddressUpdates) {
        return;
    } //snip

但是我無法確認問題是此布爾值設置為true還是實際如何更新!

碧珠

您的答案似乎正確。 但是,順序似乎是錯誤的。 load-on-startup標簽應該在最后一行,否則它將在Eclipse中顯示錯誤。

<servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>
        org.apache.cxf.transport.servlet.CXFServlet
    </servlet-class>
    <init-param>
        <param-name>disable-address-updates</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

您能否確認您使用的CXF版本-我沒有看到該緩存行為-2.3.1。

服務的URL是根據客戶端用於請求的URL(基本上使用httpRequest.getRequestURL)確定的,除非為上面的終結點標記提供了明確的PublishedEndpointUrl屬性。

編輯:奇怪,聽起來您的EDIT 2可能是正確的方向,如設置“ disable-address-updates”,請嘗試以這種方式在web.xml文件中初始化CXFServlet,看是否有幫助:

    <servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>
        org.apache.cxf.transport.servlet.CXFServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    <init-param>
        <param-name>disable-address-updates</param-name>
        <param-value>false</param-value>
    </init-param>
</servlet>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM