2011-08-22 13 views
6

Próbuję utworzyć niedopałek WSDL http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl użyciu Axis2/C (C++), stosując następujące polecenie:oś2/C i ONVIF

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

i mam następującą odpowiedź:

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 

Odpowiedz

0

Ten błąd zazwyczaj pochodzących ze względu na narzędzie nie może znaleźć element usług w WSDL. Ponieważ w definicji WSDL musi mieć zdefiniowany punkt końcowy. Sprawdź WSDL, czy zawiera element usługi lub czy inny importowany plik WSDL zawiera element usługi.

Tak więc, aby się tego pozbyć, musisz zdefiniować punkt końcowy w tym pliku WSDL.

0

użyłem hack used on python-zeep, ale to pomaga axis2/C, jak również:

Dodaj to do devicemgmt.wsdl, tuż przed zamknięciem tagu "</wsdl: Definicje >":

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

Jednak nadal mam problemy z generowaniem kodu z dowolnymi powiązaniami zmiennych ("XSD complexType z treścią mix nieobsługiwaną w ADB"). Musiałem go wyłączyć w następujący sposób:

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