在使用 JAX-WS RI 發布使用從預定檔案.wsdl和.xsd檔案生成的存根實作的 SOAP 端點時,它會自動為已發布的端點生成相應的 WSDL 檔案。例如,一個端點發布在http://localhost:8081/ep其 WSDL 檔案中http://localhost:8081/ep?wsdl,其中包含其他模式檔案的匯入,而這些模式檔案又可以匯入更多檔案。
問題是檔案中的一個這樣的匯入.xsd是通過參考公共 URL 自動生成的:
...
<xs:import namespace="http://www.w3.org/2005/08/addressing"
schemaLocation="http://www.w3.org/2006/03/addressing/ws-addr.xsd"/>
...
當嘗試在沒有公共 Internet 連接的環境中決議此端點的 WSDL 時,這可能是一個問題。生成的存根包括來自 的類ws-addr.xsd,因此 JAX-WS RI 應該能夠.xsd從這些存根生成和發布。
這怎么能.xsd像其他命名空間模式那樣被迫生成所需的模式本身,為什么這首先使用公共位置?
uj5u.com熱心網友回復:
問題是某些其他依賴項會覆寫架構的默認設定。由于該專案使用 JAX-WS RI,因此它還包括一個依賴項,該依賴項在包中jakarta.xml.ws-api包含一個package-info.java檔案,該檔案javax.xml.ws.wsaddressing包含以下資訊:
@javax.xml.bind.annotation.XmlSchema(namespace=W3CEndpointReference.NS,
location="http://www.w3.org/2006/03/addressing/ws-addr.xsd")
package javax.xml.ws.wsaddressing;
W3CEndpointReference.NS在哪里http://www.w3.org/2005/08/addressing。
這通過一些自動配置魔法,告訴 JAX-WS RI 在參考指定命名空間時使用給定的公共位置。location 的默認值是##generate使模式生成器生成所需的組件。
因此,為了覆寫它,我們可以將我們自己的package-info.java檔案添加到我們自己的代碼庫中,但在同一個包中,具有相同的注釋但位置的默認值:
@javax.xml.bind.annotation.XmlSchema(namespace=W3CEndpointReference.NS)
package javax.xml.ws.wsaddressing;
(無location鍵表示使用默認值)
結果是生成的模式使用生成的尋址.xsd檔案而不是公共檔案:
<xs:import namespace="http://www.w3.org/2005/08/addressing"
schemaLocation="http://localhost:8081/ep?xsd=10"/>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/460107.html
