基于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>
如果他们没有,为他们创建,然后运行生成命令。
如果您需要更多信息,请告诉我。
我想为相机等设备生成服务器代码。这些设备有一个名为 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>
如果他们没有,为他们创建,然后运行生成命令。 如果您需要更多信息,请告诉我。