1

我有一个应用程序必须使用 SOAP 与 SmartServer 进行通信,SmartServer 是嵌入式设备。它接受的 SOAP 消息没有名称空间,但 gSAOP 发送它们时带有名称空间。所以它们看起来像这样:

<ns3:List>
 <ns3:iLonItem>
  <ns3:xSelect></ns3:xSelect>
 </ns3:iLonItem>
</ns3:List>

而不是这个:

<List>
 <iLonItem>
  <xSelect></xSelect>
 </iLonItem>
</List>

我首先尝试将 WSDL 和 XSD 文件中的合格更改为不合格,然后重新生成文件,并将不合格更改为合格。但我得到的最好的是

<ns3:List>
 <iLonItem>
  <xSelect></xSelect>
 </iLonItem>
</ns3:List>

哪个看起来更好,但列表仍然带有名称空间。

然后我发现这个网站说我必须使用 SOAP_XML_DEFAULTNS 选项,所以我尝试了。这在开始时不起作用,但后来我发现我必须使用版本 2.8.1 而不是 2.7.9l-0.2(Debian 的标准版本)。所以我卸载了 Debian 版本并下载了 2.8.1 并复制了文件。但是现在当我尝试使用 soapcpp2 生成文件时,缺少以下文件:soapClient.cpp、soapClientLib.cpp、soapProxy.h 以及许多 *.req.xml 和 *.res.xml 文件。我特别需要soapClient.cpp 文件来编译我的项目。

我尝试了 gsoap/bin 目录中的标准二进制文件,并按照 INSTALL.txt 中的描述从 gsoap 目录中重建了 src 和 wsdl 文件,但是这些都不是我想要的。

任何人都可以进一步帮助我吗?

如果重要的话,我使用的是 Debian Linux 5.0.8 版(Lenny,旧稳定版)32 位。

4

1 回答 1

0

关于你的问题:

...缺少以下文件:soapClient.cpp、soapClientLib.cpp、soapProxy.h 以及许多 *.req.xml 和 *.res.xml 文件。我特别需要soapClient.cpp 文件来编译我的项目。

根据链接http://www.cs.fsu.edu/~engelen/soapdoc2.html#tth_sEc8(参见第 9.1 节),看起来您可能为调用 soapcpp2 设置了错误的选项。您确定您没有使用 -S 开关指定“仅生成服务器端代码”吗?仅对于客户端,您将使用 -C。对于服务器端和客户端文件,不需要任何开关。此外,生成代理文件需要使用 -i。

希望这会有所帮助,瑞克

于 2011-04-22T14:39:37.417 回答