Maw*_*wia 6 java xsd wsdl web-services jax-ws
我使用JAX-WS创建了一个小型Web服务.WSDL文件具有这样的TYPES元素.
<types>
<xsd:schema>
<xsd:import namespace="http://ws.poc.mawia/" schemaLocation="http://localhost:777/ws/hello?xsd=1"/>
</xsd:schema>
</types>
Run Code Online (Sandbox Code Playgroud)
Web服务的URL是http://localhost:777/ws/hello?wsdl,XSD是http://localhost:777/ws/hello?xsd=1.不同位置的XSD架构文件具有这样的数据类型定义.
...
...
<xs:complexType name="student">
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0"/>
<xs:element name="rollNo" type="xs:int"/>
</xs:sequence>
</xs:complexType>
...
...
Run Code Online (Sandbox Code Playgroud)
我见过的大多数WSDL文件通常在WSDL文件本身内部都有完整的XSD定义,但JAX-WS将它放在不同的位置.
这应该是怎么回事?如何配置JAX-WS以将所有XSD定义放在一个WSDL文件中?
这应该是怎么回事?
将XSD与WSDL分离是JAX-WS中的默认行为,您不必过于担心它.最新的WS框架(包括WCF)通常能够处理它.根据XSD的大小,导入它可能会使WSDL对于人类更具可读性.对于小型Web服务,拥有嵌入式架构肯定会更容易,但导入它也不是太大的问题.
如何配置JAX-WS以将所有XSD定义放在一个WSDL文件中?
我不知道直接的方法让运行时将模式嵌入到WSDL中,但是有一种解决方法可以实现这一点:
typesWSDL 的部分中,并替换那里的模式导入您可以通过自定义@WebService注释来实现4 . 这可能看起来像这样:
@WebService( wsdlLocation = "MyWebService.wsdl")
public class MyWebService { .... }
Run Code Online (Sandbox Code Playgroud)