2011-08-22 23 views
6

Tôi đang cố gắng để tạo ra các cuống wsdl http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl sử dụng Axis2/C (C++), sử dụng lệnh sau:Axis2/C và ONVIF

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

và tôi nhận được câu trả lời sau đây:

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 

Trả lời

0

lỗi này thường đến vì công cụ này không thể tìm thấy một yếu tố dịch vụ trong WSDL. Bởi vì trong định nghĩa WSDL, nó phải xác định điểm cuối. Vui lòng kiểm tra WSDL của bạn cho dù nó có phần tử dịch vụ đi kèm hay bất kỳ WSDL đã nhập nào khác có phần tử dịch vụ.

Vì vậy, về cơ bản để loại bỏ điều này, bạn phải xác định điểm cuối trong WSDL này.

0

tôi đã sử dụng hack used on python-zeep, nhưng nó giúp với axis2/c cũng như:

Thêm phần này vào devicemgmt.wsdl, ngay trước thẻ đóng "</wsdl: định nghĩa >":

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

Tuy nhiên, tôi vẫn gặp sự cố khi tạo mã với bất kỳ ràng buộc biến nào ("XSD complexType có nội dung hỗn hợp không được hỗ trợ trong ADB"). Tôi phải vô hiệu hóa nó như sau:

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