2014-02-06 26 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 
相关问题