一、使用wsdl2h 生成.h文件
http://www.onvif.org/Documents/Specifications.aspx
下载另存wsdl文件
使用wsdl2h -t typemap.dat -o onvif.h advancedsecurity.wsdl analytics.wsdl devicemgmt.wsdl event.wsdl receiver.wsdl replay.wsdl analyticsdevice.wsdl deviceio.wsdl display.wsdl media.wsdl remotediscovery.wsdl
发现一直报找不到../../../onvif.xsd文件
打开wsdl文件,发现里面schemaLocation=“”居然是相对路径,也是醉了,改成绝对路径,schemaLocation="./onvif.xsd",解决问题。
二、利用生成的.h文件,生成框架代码
打开生成的onvif.h 在#import 那加入一行代码 #import "wsse.h"用于鉴权
soapcpp2 -j -2 -x onvif.h -I ../gsoap-2.8/gsoap/
(soapcpp2 -2 -L -x -i -d ../onvif_2.8.21_source/ -I../gsoap-2.8.21/gsoap/ -I../gsoap-2.8.21/gsoap/import/ onvif.h)
结果报一个错
wsa5.h(288): **ERROR**: remote method name clash: struct/class 'SOAP_ENV__Fault' already declared at line 274
google一下发现有很多网友遇到同样的问题,直接注释掉就可以了。
生成的代码:
- 52025 soapAdvancedSecurityServiceBindingProxy.cpp
- 14852 soapAdvancedSecurityServiceBindingProxy.h
- 48254 soapAdvancedSecurityServiceBindingService.cpp
- 9668 soapAdvancedSecurityServiceBindingService.h
- 46419 soapAnalyticsDeviceBindingProxy.cpp
- 13994 soapAnalyticsDeviceBindingProxy.h
- 43336 soapAnalyticsDeviceBindingService.cpp
- 9196 soapAnalyticsDeviceBindingService.h
- 14975504 soapC.cpp*
- 357069 soapDeviceBindingProxy.cpp
- 88897 soapDeviceBindingProxy.h
- 311090 soapDeviceBindingService.cpp
- 44207 soapDeviceBindingService.h
- 68699 soapDeviceIOBindingProxy.cpp
- 19977 soapDeviceIOBindingProxy.h
- 62653 soapDeviceIOBindingService.cpp
- 11925 soapDeviceIOBindingService.h
- 28246 soapDisplayBindingProxy.cpp
- 8626 soapDisplayBindingProxy.h
- 27159 soapDisplayBindingService.cpp
- 6710 soapDisplayBindingService.h
- 6257079 soapH.h
- 376633 soapMediaBindingProxy.cpp
- 105679 soapMediaBindingProxy.h
- 332397 soapMediaBindingService.cpp
- 51273 soapMediaBindingService.h
- 47180 soapPullPointSubscriptionBindingProxy.cpp
- 13964 soapPullPointSubscriptionBindingProxy.h
- 41356 soapPullPointSubscriptionBindingService.cpp
- 8846 soapPullPointSubscriptionBindingService.h
- 23338 soapReceiverBindingProxy.cpp
- 7175 soapReceiverBindingProxy.h
- 22841 soapReceiverBindingService.cpp
- 6053 soapReceiverBindingService.h
- 12585 soapRemoteDiscoveryBindingProxy.cpp
- 4438 soapRemoteDiscoveryBindingProxy.h
- 13726 soapRemoteDiscoveryBindingService.cpp
- 4824 soapRemoteDiscoveryBindingService.h
- 15269 soapReplayBindingProxy.cpp
- 5411 soapReplayBindingProxy.h
- 15928 soapReplayBindingService.cpp
- 5205 soapReplayBindingService.h
- 30344 soapRuleEngineBindingProxy.cpp
- 9061 soapRuleEngineBindingProxy.h
- 28994 soapRuleEngineBindingService.cpp
- 6933 soapRuleEngineBindingService.h
- 18613 soapwsddProxy.cpp
- 10336 soapwsddProxy.h
- 12328 soapwsddService.cpp
- 6002 soapwsddService.h
其中的.nsmap都是一样的,留一个,改名为nsmap.h(名字随意)其他全删了。
三、添加gsoap包内需要用到的代码
在gsoap包内找到stdsoap2.cpp,stdsoap2.h,wsaapi.c,wsaapi.h,wsddapi.d,wsddapi.h
(zxycele) |