基于ONVIF wsdl(Top Down Method)生成Java webservice

Generate Java webservice based on ONVIF wsdl (Top Down Method)

我想为相机等设备生成服务器代码。这些设备有一个名为 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生成服务器代码?

如果按照您为 wsdl2java 指定的 link https://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl 访问 HTML 页面,您将不会获得 WSDL 文件。请参阅下面的屏幕截图:

HTML 文档实际上是一个有效的 WSDL,即完整的 xml 文档,但它使用 XSLT 将 XML 转换为 HTML 以供显示,这会创建一个wsdl@java.

有点问题

如果您查看网页源代码并删除 XSLT link 代码:

<?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 包含您也需要的 link 到 XSD 文件.当前位置不能按原样使用。

我在从 WSDL 文件生成 java 类 以创建 ONVIF Web 服务器时遇到了同样的问题。经过大量调查,我发现我从 https://www.onvif.org

获得的 WDSL 文件中存在一些错误

如果您想正确创建 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>

如果他们没有,为他们创建,然后运行生成命令。 如果您需要更多信息,请告诉我。