我正在尝试使用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文档中没有找到类似的内容。
感谢您分享您的经验。