我使用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>
网络服务的网址为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>
...
...
我见过的大多数WSDL文件通常在WSDL文件中都有完整的XSD定义,但JAX-WS将它放在不同的位置。
这是怎么回事?如何配置JAX-WS以将所有XSD定义放在一个WSDL文件中?
答案 0 :(得分:8)
这应该是怎么回事?
将XSD与WSDL分离是JAX-WS中的默认行为,您不必过于担心它。最新的WS框架(包括WCF)通常能够处理它。根据XSD的大小,导入它可能会使WSDL对于人类更具可读性。对于小型Web服务,拥有嵌入式架构肯定会更容易,但导入它也不是太大的问题。
如何配置JAX-WS以将所有XSD定义放在一个WSDL文件中?
我不知道将运行时嵌入到WSDL中的直接方法,但是有一种解决方法可以实现这一点:
types
部分并替换那里的模式导入您可以通过自定义@WebService
注释来实现4.这可能看起来像这样:
@WebService( wsdlLocation = "MyWebService.wsdl")
public class MyWebService { .... }
答案 1 :(得分:0)
您的方法没有任何问题。指向另一个使用URL的wsdl的WSDL很好。
如果您不想要它,请使用@WebService注释的wsdlLocation属性提及wsdl位置。但是再次使用这种方法,您将不得不手动修改wsdl。