基于ONVIF wsdl生成Java webservice(自顶向下方法)

5
我希望为像相机这样的设备生成服务器代码。这些设备有一个标准协议,称为ONVIF,它发布了一些流行的WSDL文档。因此,我必须从ONFIV的WSDL文档生成接口和框架。
当我使用wsdl2java从ONVIF wsdl文件生成服务器代码时,它提示:
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个回答

3
我曾遇到一个问题,需要从WSDL文件中生成Java类以创建ONVIF Web服务器。经过大量调查后,我发现从https://www.onvif.org获取的WDSL文件存在一些错误。 如果您想正确创建Java类,您需要对它们进行一些更改。 首先,在每个 .wsdl 文件中检查 schemaLocation 的正确路径,可能需要更改为:schemaLocation="../../../ver10/schema/onvif.xsd"/> 另外,请检查所有的 .wsdl 文件是否都有像这样的 service 标记。
<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>

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

嗨Yoones,你能帮我解决这个问题吗?我觉得每次导入wsdl文件都要更改太愚蠢了。 - Crearo Rotar

0
如果您按照指定的方式访问链接https://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl进行wsdl2java操作,您会进入一个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文件的链接。当前位置不能直接使用。


没有任何更改。在WSDL中未找到任何服务。 - M-Razavi
是的,这个 WSDL 根本无效。你需要联系该组织。这不是一个有效的 WSDL 1.1。 - Namphibian
我想创建一个作为摄像头提供者的 Web 服务。这个文件的哪个部分应该被更改? - M-Razavi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接