我正在嘗試使用wsdl2h/soap2cpp爲onvif媒體WSDL http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl生成代碼。這個wsdl有一些依賴關係。如何在沒有互聯網連接的情況下運行gSOAP代碼生成器?
讀gSOAP的常見問題http://www.cs.fsu.edu/~engelen/soapfaq.html,我終於抽取所需的命名空間在以下typemap.dat
trt = "http://www.onvif.org/ver10/media/wsdl"
tt = "http://www.onvif.org/ver10/schema"
wsnt = "http://docs.oasis-open.org/wsn/b-2"
wsrfbf = "http://docs.oasis-open.org/wsrf/bf-2"
wstop = "http://docs.oasis-open.org/wsn/t-1"
xop="http://www.w3.org/2004/08/xop/include"
wsa5 = <http://www.w3.org/2005/08/addressing>
有了這個映射gSOAP的代碼生成器運行正常:
wsdl2h media.wsdl
soapcpp2 -2ix media.h -I /usr/share/gsoap/import
但是,這需要有互聯網連接。我想用本地存儲的文件構建。
在wsdl2h幫助有自己感興趣的一個選項:
所以我下載什麼被wsdl2h下載
-i不導入(高級選項):
- http://www.onvif.org/onvif/ver10/schema/onvif.xsd
- http://docs.oasis-open.org/wsn/b-2.xsd
- http://www.w3.org/2004/08/xop/include
- http://docs.oasis-open.org/wsrf/bf-2.xsd
- http://docs.oasis-open.org/wsn/t-1.xsd
而且下一次運行
wsdl2h -im media.wsdl onvif.xsd b-2.xsd include bf-2.xsd t-1.xsd soapcpp2 -2ix media.h -I /usr/share/gsoap/import
但這種失敗,此類型的輸出:
** The gSOAP code generator for C and C++, soapcpp2 release 2.8.7 ** Copyright (C) 2000-2011, Robert van Engelen, Genivia Inc. ** All Rights Reserved. This product is provided "as is", without any warranty. ** The soapcpp2 tool is released under one of the following two licenses: ** GPL or the commercial license by Genivia Inc. media.h(164): syntax error media.h(163): Syntax error: declaration expected media.h(173): syntax error ...
在media.h代碼參考strucure來自ws-addressing。接下來,我嘗試了導入更多xsd的不同事情,但我沒有找到解決缺失依賴關係的方法。 也許這不是從本地文件構建的正確方法。無論如何,我想避免在wsdls和xsd文件的任何修改。另一種方法可能是將遠程URL映射到本地URL(如Apache CXF)的目錄,但在gSOAP文檔中沒有找到類似的內容。
感謝您分享您的經驗。