在wsdl manual中,在示例2的第二部分中,有一个wsdl文件包含portType
,但没有binding
块
<?xml version="1.0"?>
<definitions
targetNamespace="http://example.com/stockquote/definitions"
xmlns:tns="http://example.com/stockquote/definitions"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<import namespace="some.xsd"
location="some.xsd"/>
<message name="GetLastTradePriceInput">
<part name="body"/>
</message>
<message name="GetLastTradePriceOutput">
<part name="body"/>
</message>
<portType name="StockQuotePortType">
<operation name="GetLastTradePrice">
<input message="tns:GetLastTradePriceInput"/>
<output message="tns:GetLastTradePriceOutput"/>
</operation>
</portType>
</definitions>
some.xsd
是同一个示例的第1部分,也不包含任何绑定。
当我尝试通过wsdltojava
的{{1}}传递该文件时,它会给我一个警告
cxf
并出错:
WARNING: WSDL document file:/C:/IdeaProjects/sss/webservices/src/main/schema/BundleAdmin/Atry.wsdl does not define any services
这些是WSI-BP-1.0 R2718 violation: A wsdl:binding in a DESCRIPTION MUST have the same set of wsdl:operations as the wsdl:portType to which it refers. GetLastTradePrice not found in wsdl:binding.
使用的参数:
wsdltojava
请让翻译程序要求 List<String> prepareArgs = ['-fe', 'jaxws',
'-autoNameResolution',
'-db', 'jaxb',
'-xjc-extension',
'-impl', '-server', '-client', '-validate',
'-d', ext.genDirName,
/* change package name for types already generated with XmlBeans */
'-p', 'http://messaging.ei.tmobile.net/datatypes=net.tmobile.ei.messaging.jaxb'
部分的原因是什么? -validate可以让SW注意到问题,但不是创建问题的arg。
答案 0 :(得分:0)
...引用外部XSD的正确方法是在wsdl:types元素中使用带有import / include的XSD架构。
详情请参阅
在您的情况下,您正在使用
*<import namespace="some.xsd"
location="some.xsd"/>*
根据引用的链接,为什么不在<import namespace=...
元素中包含<types>
元素,如下所示:
答案 1 :(得分:0)
哦,这完全是我的错误。 wsdl手册的示例2的第二部分实际上只有portType而没有绑定。它导入的xsd文件也没有绑定(当然)。但第二部分不是服务!该服务是第三部分,具有绑定和导入部分2.因此,该服务具有portType和绑定。需要binding
部分的它们不是的参数,总是需要它。
我应该注意警告 - 提到的文件还不是服务,应该存在另一个文件,它将是一个服务,并将包含该文件的包含和绑定部分。或者,当然,它可以在一个文件中包含portType
和binding
。