2011-08-22 24 views
6

estoy tratando de crear el código auxiliar del WSDL http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl usando AXIS2/C (C++), con el siguiente comando:AXIS2/C y ONVIF

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

y me da la siguiente respuesta:

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 

Respuesta

0

Este error normalmente viene a causa de la herramienta no puede encontrar un elemento de servicio en el WSDL. Porque en la definición WSDL debe tener un punto final definido. Compruebe su WSDL si tiene un elemento de servicio incluido o si cualquier otro WSDL importado tiene el elemento de servicio.

Para deshacerte de esto, básicamente, debes definir un punto final en este WSDL.

0

he utilizado la hack used on python-zeep, pero ayuda con axis2/C, así:

añadir esto a devicemgmt.wsdl, justo antes de la etiqueta de cierre "</WSDL: definiciones >":

<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> 

Sin embargo, sigo teniendo problemas para generar el código con cualquiera de los enlaces de variable ("XSD complexType with mix content no supported in ADB"). Tuve que deshabilitarlo de la siguiente manera:

./WSDL2C.sh -o ../axis2c-test/gen -d none -uri devicemgmt.wsdl 
Cuestiones relacionadas