我想为像Camera这样的设备生成服务器代码。这些设备有一个名为ONVIF的标准协议,它发布了一些流行的WSDL文档。所以我必须从ONFIV的WSDL文档生成一个接口和skelton。
当我使用wsdl2java从ONVIF wsdl file生成服务器代码时,它说:
org.apache.axis2.AxisFault: No services found in the WSDL at https://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl with targetnamespace http://www.onvif.org/ver10/device/wsdl
通过这些WSDL文件是否存在问题?
如何基于ONVIF WSDL生成服务器代码?
答案 0 :(得分:3)
我在从WSDL文件生成java类时遇到了同样的问题,以便创建ONVIF Web服务器。经过大量调查后,我发现WDSL文件中有一些错误,我从https://www.onvif.org
获得了这些错误如果要正确创建java类,则需要对它们进行一些更改。
首先,在每个.wsdl文件中检查schemaLocation
的正确路径,可能需要更改为:schemaLocation="../../../ver10/schema/onvif.xsd"/>
并检查所有.wsdl文件是否都有这样的服务标签。
<wsdl:service name="DeviceIOPService">
<wsdl:port name="DeviceIOPort" binding="tmd:DeviceIOBinding">
<soap:address location="http://www.onvif.org/ver10/deviceIO/wsdl"/>
</wsdl:port>
</wsdl:service>
如果没有,请为它们创建,然后运行生成命令。 如果您需要更多信息,请通知我。
答案 1 :(得分:0)
如果您按照为wsdl2java指定的链接https://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl进入HTML页面,则表示您没有获得WSDL文件。请参见下面的屏幕截图:
HTML文档实际上是一个有效的WSDL,即完整的xml文档,但它使用XSLT将XML转换为HTML以供显示,这为wsdl @ java带来了一些问题。
如果您查看网页源并删除了XSLT链接代码:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../../ver20/util/onvif-wsdl-viewer.xsl"?>
变为:
<?xml version="1.0" encoding="utf-8"?>
然后,您可以将WSDL加载到WSDL编辑器中,并查看操作,请参见下面的屏幕截图:
为了实现这个目的,我会联系Onvif组并询问它们的WSDL位置,因为WSDL包含了您需要的XSD文件的链接。当前位置不能按原样使用。