我的消息传递提供程序为我提供了两种不同类型的WSDL。
http://my.amazonaws.com:8000/webservice/?wsdl
http://my.amazonaws.com:8000/webservice/?singleWsdl
第一个是嵌入式 WSDL。不能用它来生成WSDL2java
包和
不能使用JAX-WS来创建连接。
第二个是单个 WSDL。它可以使用CXF 3.0的WSDL2java生成Java包,并可以使用JAX-WS创建连接。它运作得很好。
请告诉我这两种WSDL之间的区别。
答案 0 :(得分:34)
在不知道这些链接返回的情况下我们只能猜测,但这里有一些可能对您有帮助的细节......
使用?wsdl
后缀Web服务端点获取WSDL文件。 WSDL可以在运行时由框架基于Web服务框架代码生成,也可以是服务器在指定URL参数时发回的实际物理文件。
WSDL包含一个XML Schema,可以在WSDL本身内部指定,也可以作为WSDL导入的单独文件指定。现在出现问题......
某些Web服务存根生成器只能处理完整的WSDL,其中包含Schema。如果WSDL导入其他文件,则工具无法解析导入并失败。这使得Web服务难以使用,因为客户端在创建存根以与Web服务交互时遇到问题。以至于服务提供商要么使用实际的WSDL来响应?wsdl
请求,要么开始编写各种黑客和插件来使Web服务生成完整的WSDL。
但有些提供商甚至没有打扰,所以客户必须编写黑客来解析WSDL,或者他们必须下载所有文件,将它们手动组装到一个文件中并使用它。
随着时间的推移,人们认为这是一个问题,框架适合于提供完整的WSDL,而不是一个带有导入的WSDL。但这又产生了另一个问题。更改?wsdl
返回的网址可能会破坏围绕它创建的所有黑客攻击以修复导入问题。出于这个原因,选择了另一个约定来返回完整的WSDL:?singleWsdl
。
因此,存在生成完整WSDL的框架,一些使用导入生成它,一些允许您指定实际的物理文件,一些支持?singleWsdl
约定,一些不支持。与此问题无关,但只是为了完成,还有一个?wsdl2
约定,让您获得WSDL 2.0定义(?wsdl
为您提供WSDL 1.1)。有些框架支持?wsdl2
,有些则不支持。
我的猜测是你的问题是由Schema导入引起的,但是没有WSDL本身我无法分辨。希望至少这些细节可以帮助您更好地识别问题。