WSDL导入'location'属性-vs- XSD导入'schemaLocation'属性

时间:2013-10-09 23:21:43

标签: xsd wsdl jax-ws wsimport

之间的关系是什么:

...特别是前者的location属性与后者的schemaLocation属性之间的关系?

虽然我可以使用catalog文件(在JAX-WS / wsimport工具链中)来"覆盖" schemaLocation元素的xsd:import属性似乎不能对location语句的wsdl:import属性执行相同的操作。

1 个答案:

答案 0 :(得分:4)

在这两种情况下,import都建立了文档(即WSDL或XSD)与外部资源之间的关系。

除了围绕 wsdl:import 的混淆,特别是如果它可以用于导入XSD(在the interoperable way它不应该),它们都是为了为自己的类型做同样的事情,即引入另一个WSDL(在WSDL案例中)或另一个XSD(在XSD案例中)范围内的定义,从而允许采用模块化方法进行创作。

您引用的属性应该是等效的,就像Java中的import或多或少与C#中的using匹配一样。

但是,如果考虑WSDL 1.1注释,则每个细节的具体情况会有所不同:在XSD中, schemaLocation 属性对于xsd:import是可选的(因为导入的位置可以通过其命名空间使用规范允许的其他方法),位置属性的WSDL 1.1 note中没有内置相同的内容。

此外,XSD规范明确允许覆盖:

The ·actual value· of the schemaLocation, if present, gives a **hint** as to where a serialization of a ·schema document·...

如果您查找the same in WSDL 2.0,您会注意到现在WSDL除了旧的 import 之外还支持 include ,基本上遵循相同的语义与指令关联的命名空间。更重要的是,location属性的使用也与XSD中的一致,反过来应该促进基于目录的方法来解决“悬空”导入。

为了将其四舍五入,给定WSDL 1.1中的强制位置属性,谈论目录或覆盖是没有意义的,因为它不是暗示或允许的。