有几个类似的问题,但没有一个明确回答这个问题。
我正在使用
wsimport
从 .wsdl 文件(Onvif 的 wsdl 文件)生成代码。跑步
wsimport -keep https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl -extension -Xnocompile
输出
At least one WSDL with at least one service definition needs to be provided.
基于this SO回答我添加了此服务声明,本地下载了
onvif.xsd
,并且common.xsd
,修改了为这些Onvif文件指定的路径,然后生成了代码。
是否有更直接的方法在每个 Onvif URL 上运行
wsimport
命令?有超过 20 个 wsdl 文件,我发现手动下载,然后在每个文件中进行上述更改才能运行wsimport
。
您应该在您的
WSDL
文件中进行以下更改:
在第 11 行添加
name="DeviceService"
,以 <wsdl:definitions...
添加
<wsdl:service name="DeviceService">
<wsdl:port name="DevicePort" binding="tds:DeviceBinding">
<soap:address location="http://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl"/>
</wsdl:port>
</wsdl:service>
在文件末尾
</wsdl:binding>
之后
然后运行生成命令。
请参阅此处:https://github.com/onvif/specs/discussions/90
引用:“我总是直接在 ONVIF WSDL 文件中定义服务,或者创建一个导入 ONVIF WSDL 并定义我需要生成的所有服务的父 WSDL 文件。我建议使用后者,因为当 ONVIF 将更新发布到WSDL 文件,您无需不断重新添加服务。”