AXIS2 / C и ONVIF - PullRequest
       50

AXIS2 / C и ONVIF

6 голосов
/ 22 августа 2011

Я пытаюсь создать заглушку wsdl http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl, используя AXIS2 / C (c ++), используя следующую команду:

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

Ответы [ 2 ]

2 голосов
/ 07 июня 2017

Я использовал хак , используемый на python-zeep , но он также помогает с axis2 / c:

Добавьте это в devicemgmt.wsdl, непосредственно перед тегом close "":

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

Однако у меня все еще возникают проблемы при создании кода с любой из привязок переменных (" XSD complexType с содержимым микса, не поддерживаемым в ADB "). Мне пришлось отключить его следующим образом:

./WSDL2C.sh -o ../axis2c-test/gen -d none -uri devicemgmt.wsdl
0 голосов
/ 05 мая 2016

Эта ошибка обычно возникает из-за того, что инструмент не может найти элемент службы в WSDL.Потому что в определении WSDL должна быть определена конечная точка.Пожалуйста, проверьте ваш WSDL, есть ли в нем сервисный элемент или в любом другом импортированном WSDL есть сервисный элемент.

Итак, чтобы избавиться от этого, вам нужно определить конечную точку в этом WSDL.

...