【问题标题】:How to run gSOAP code generator without internet connection?如何在没有互联网连接的情况下运行 gSOAP 代码生成器?
【发布时间】:2014-02-06 18:27:53
【问题描述】:

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

阅读 gSOAP FAQ 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 下载的内容:

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

感谢您分享您的经验。

【问题讨论】:

    标签: c++ wsdl gsoap onvif


    【解决方案1】:

    我从 gSOAP 站点 http://www.cs.fsu.edu/~engelen/soapdoc2.html 仅找到了 typemap.dat 格式的部分文档。但是我注意到一些命名空间定义使用&lt;url&gt; 而不是"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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-30
      • 2012-03-18
      • 2018-01-31
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      相关资源
      最近更新 更多