当使用JAX-WS RI来发布使用从预先确定的.wsdl
和.xsd
文件生成的存根控件实现的SOAP端点时,它会自动为发布的端点生成相应的WSDL文件。例如,在http://localhost:8081/ep
发布的端点在http://localhost:8081/ep?wsdl
有其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
模式本身,就像其他命名空间模式一样?为什么首先要使用公共位置?
1条答案
按热度按时间ibrsph3r1#
问题是其他一些依赖项覆盖了模式的默认设置。由于项目使用JAX-WS RI,因此它还包括
jakarta.xml.ws-api
的依赖项,其中包括javax.xml.ws.wsaddressing
包中的package-info.java
文件,该文件包含以下标题:其中
W3CEndpointReference.NS
是http://www.w3.org/2005/08/addressing
。这通过一些自动配置魔法,告诉JAX-WS RI在引用指定的名称空间时使用给定的公共位置。位置的默认值是
##generate
,它使模式生成器生成所需的组件。因此,为了覆盖这个,我们可以将我们自己的
package-info.java
文件添加到我们自己的代码库中,但在同一个包中,使用相同的注解,但使用位置的默认值:(no
location
键表示使用默认值)结果是生成的模式使用生成的寻址
.xsd
文件而不是公共文件: