如何运行没有互联网连接的gSOAP代码生成器?

时间:2014-02-06 18:27:53

标签: c++ wsdl gsoap onvif

我正在尝试使用wsdl2h / soap2cpp为onvif媒体WSDL http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl生成代码。这个wsdl有一些依赖。

阅读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帮助中,有一个看起来很有趣的选项:

  

-i不导入(高级选项)

所以我下载了wsdl2h下载的内容:

  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
  6. 下次运行

    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中,代码引用结构来自ws-addressing。接下来我尝试了导入更多xsd的不同内容,但是我没有找到解决缺少的依赖项的方法。 也许这不是从本地文件构建的正确方法。无论如何,我想避免在wsdls 和xsd文件中进行任何修改。另一种方法可能是将远程URL映射到本地URL(如Apache CXF)的目录,但我在gSOAP文档中找不到类似的内容。

    感谢您分享您的经验。

1 个答案:

答案 0 :(得分:1)

我在gSOAP网站http://www.cs.fsu.edu/~engelen/soapdoc2.html中只找到了typemap.dat格式的部分文档。但是我注意到某些命名空间定义使用<url>而不是"url"。 经过一些尝试,这给出了问题的解决方案,定义了封闭在&lt;&gt;内的命名空间。

所以我修改了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