2014-02-06 30 views
0

我正在嘗試使用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不導入(高級選項):

  1. http://www.onvif.org/onvif/ver10/schema/onvif.xsd
  2. http://docs.oasis-open.org/wsn/b-2.xsd
  3. http://www.w3.org/2004/08/xop/include
  4. http://docs.oasis-open.org/wsrf/bf-2.xsd
  5. 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文檔中沒有找到類似的內容。

感謝您分享您的經驗。

回答

0

我只從gSOAP站點http://www.cs.fsu.edu/~engelen/soapdoc2.html發現了typemap.dat格式的部分文檔。但是我注意到一些名稱空間定義使用<url>而不是"url"。 經過一番嘗試,這給了一個解決問題的方法,定義了包含在<>中的命名空間。

所以我修改這樣的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> 

然後,它可以生成從media.wsdl代碼,而無需連接到互聯網:

wsdl2h media.wsdl onvif.xsd b-2.xsd include bf-2.xsd t-1.xsd 
soapcpp2 -2ix media.h -I /usr/share/gsoap/import 
相關問題