基于ONVIF wsdl生成Java Web服务(自顶向下方法)

时间:2017-10-10 08:36:39

标签: java web-services soap wsdl onvif

我想为像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生成服务器代码?

2 个答案:

答案 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文件。请参见下面的屏幕截图:

enter image description here

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编辑器中,并查看操作,请参见下面的屏幕截图:

enter image description here

为了实现这个目的,我会联系Onvif组并询问它们的WSDL位置,因为WSDL包含了您需要的XSD文件的链接。当前位置不能按原样使用。