6

我正在尝试使用 AXIS2/C (c++) 创建 wsdl http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl的存根,使用以下命令:

./WSDL2CPP.sh -uri http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl

我得到以下答案:

Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: Error parsing WSDL
    at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:153)
    at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
    at org.apache.axis2.wsdl.WSDL2CPP.main(WSDL2CPP.java:19)
Caused by: org.apache.axis2.AxisFault: **`No service was not found in the WSDL at http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl with targetnamespace http://www.onvif.org/ver10/device/wsdl`**
    at org.apache.axis2.description.WSDL11ToAllAxisServicesBuilder.populateAllServices(WSDL11ToAllAxisServicesBuilder.java:115)
    at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:147)
    ... 2 more
4

2 回答 2

2

我使用了python-zeep 上使用的hack,但它也有助于axis2/c:

将此添加到 devicemgmt.wsdl,就在关闭标记“</wsdl:definitions>”之前:

<wsdl:service name="DeviceService">
             <wsdl:port name="DevicePort" binding="tds:DeviceBinding">
               <soap:address location="http://192.168.1.100/onvif/device_service"/>
             </wsdl:port>
</wsdl:service>

但是,我仍然在使用任何变量绑定生成代码时遇到问题(“ADB 中不支持混合内容的 XSD complexType”)。我不得不按如下方式禁用它:

./WSDL2C.sh -o ../axis2c-test/gen -d none -uri devicemgmt.wsdl
于 2017-06-07T13:03:56.497 回答
0

This error normally coming because of the tool cannot find a service element in the WSDL. Because in WSDL definition it has to have a endpoint defined. Please check your WSDL whether it has a service element included or any other imported WSDL has the service element.

So basically to get rid of this you have to define a endpoint in this WSDL.

于 2016-05-05T05:51:46.167 回答