Linux下SOAP工具生成ONVIF框架

Linux下SOAP工具生成ONVIF框架

一、相關地址

Gsoap下載地址1https://zh.osdn.net/projects/sfnet_gsoap2/releases/

Gsoap下載地址2https://sourceforge.net/projects/gsoap2/

Gsoap安裝說明:https://www.genivia.com/downloads.html

ONVIF官網WSDL:https://www.onvif.org/profiles/specifications/

ONVIF官網APIhttps://www.onvif.org/onvif/ver20/util/operationIndex.html

文章出處:http://blog.csdn.net/zerolity/article/details/76442564

二、linux下安裝

1、soap下載最新soap,此處gsoap2.8.50版本

2、在linux下解壓,然後進入到解壓後的目錄gsoap-2.8;

① ./configure

② make

③ sudo make install

如果以上失敗,請驗證您是否擁有:

三、生成ONVIF框架
1、建立一個新目錄
①把/usr/local/bin/ 下剛纔生成的wsdl2h 和 soapcpp2拷貝到當前目錄下
②把gsoap-2.8/gsoap/typemap.dat也拷貝到當前目錄下
③把gsoap-2.8/gsoap/WS/WS-Discovery.wsdl拷貝至當前目錄下
2、執行命令,生成onvif.h:
兩種方法:在線生成和離線生成
a、在線生成快捷,但是,一般網絡不好的會斷開。此處小方法解決:自己手機開個wifi給筆記本。速度槓槓的!(我用的這種)
命令:./wsdl2h -o onvif.h -c -s -t ./typemap.dat http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl 
https://www.onvif.org/ver10/events/wsdl/event.wsdl https://www.onvif.org/ver10/pacs/accesscontrol.wsdl https://www.onvif.org/ver10/pacs/accessrules.wsdl https://www.onvif.org/ver10/actionengine.wsdl https://www.onvif.org/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl http://www.onvif.org/ver10/credential/wsdl/credential.wsdl https://www.onvif.org/ver10/deviceio.wsdl https://www.onvif.org/ver10/display.wsdl https://www.onvif.org/ver10/pacs/doorcontrol.wsdl https://www.onvif.org/ver20/imaging/wsdl/imaging.wsdl https://www.onvif.org/ver10/media/wsdl/media.wsdl https://www.onvif.org/ver20/media/wsdl/media.wsdl https://www.onvif.org/ver10/provisioning/wsdl/provisioning.wsdl https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl https://www.onvif.org/ver10/receiver.wsdl https://www.onvif.org/ver10/recording.wsdl https://www.onvif.org/ver10/search.wsdl https://www.onvif.org/ver10/replay.wsdl http://www.onvif.org/ver10/schedule/wsdl/schedule.wsdl https://www.onvif.org/ver10/thermal/wsdl/thermal.wsdl  https://www.onvif.org/ver10/analyticsdevice.wsdl
b、離線,到onvif官網wsdl去把所有的或者你想要的,右鍵,下載下來。
(這個注意還要下xsd文件,下了還要改wdml裏面schemaLocation元素,把他的路徑改爲你下載的xsd文件位置,我弄過一次,巨麻煩。
還是建議在線生成方便。)
命令:./wsdl2h -o onvif.h -c -s -t ./typemap.dat *wsdl

生成過程有錯的,網上百度,這兒是一番風順,估計版本新的原因吧。
3、生成框架文件
①生成onvif.h成功後,打開生成的onvif.h 在#import 那加入一行代碼 #import "wsse.h"用於鑑權
運行:./soapcpp2 -2 -c -x onvif.h -I ../gsoap-2.8/gsoap/:../gsoap-2.8/gsoap/import/:../gsoap-2.8/gsoap/custom/:../gsoap-2.8/gsoap/plugin/
-I 後面的gsoap路徑自己對應修改。

如果直接生成對應C的庫文件會發生重複定義錯誤,可以修改該文件。

wsa5.h(288): **ERROR**: remote method name clash: struct/class 'SOAP_ENV__Fault' already declared at line 274

打開文件gsoap_2.8.16/gsoap-2.8/gsoap/import/ wsa5.h

將277行int SOAP_ENV__Fault修改爲int SOAP_ENV__Fault_alex

或是將這個結構體直接註釋的方式(別用if 0方法註釋,還是會報錯),最後的結果是,都可以使用。

同時上一步生成的onvif.h文件中沒有打開wsse.h, 導致最後生成代碼中SOAP_ENV__Header 結構體中缺少定義 wsse__Security數據段,無法進行鑑權命令。



生成成功!
所有擴展名nsmap都是一樣的,留下一個更名爲wsdd.nsmap,其餘nsmap刪掉。再把soap-2.8下面的一些文件拷貝過來,最後所需文件如下所示:
duration.c  soapClient.c  soapH.h   soapStub.h  stdsoap2.h   wsdd.nsmap  duration.h  soapC.c  soapServer.c stdsoap2.c   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章