1

我们使用带有 ONVIF wsdl 的 gSOAP。2.8.10 的响应与 2.8.11 及以上版本不同。这就是我们所面临的,

1. Installed 2.8.10 version.

2. Executed below command to generate header file for ONVIF event wsdl. 
wsdl2h -c -t /usr/local/share/gsoap/WS/typemap.dat -o event.h http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl

3. soapcpp2 is invoked on header file (event.h) to generate both client and server side code.
soapcpp2 -c  -t -I /usr/local/share/gsoap/import/:/usr/local/share/gsoap event.h 

4. Respective structures will be generated in header file soapStub.h.
In soapStub.h look for structure, 
struct _ns1__GetEventPropertiesResponse->struct ns7__TopicSetType ->char **__any

*** Repeat step 2 & 3 with 2.8.11/12/13 installed and look for structures in soapStub.h struct _tev__GetEventPropertiesResponse->struct wstop__TopicSetType ->char *__any

观察到两个变化,

  1. 关于命名空间。ns1 被替换为 tev。(我们解决了这个问题)

  2. char __any 在 2.8.10 中是双指针,但在以上版本中,它是单指针。(无法解决这个问题)

我们担心 char __any。

您能否帮助我们理解为什么在 2.8.11 及以上版本中会出现这种差异。我们如何克服这一点?

4

1 回答 1

0

要将 xsd:any 类型更改为 char ** 将此行放入您的类型映射文件中。

xsd__any = | char**
于 2019-02-19T19:04:10.310 回答