【问题标题】:Using WSSE plugin for Gsoap in C++/Linux在 C++/Linux 中为 Gsoap 使用 WSSE 插件
【发布时间】:2011-06-20 12:47:59
【问题描述】:
我们如何在 C++/Linux 中为 Gsoap 实现 WSSE 插件?
这个link 没有提供所有信息。
问题是我必须在由 WSDL 生成的头文件中包含什么,以使其与 wsse 兼容,以便 soapcpp2 header.h 生成足够的代码,以便我可以成功编译 wsseapi.c?
另外,如果可能,请提供实现wsse插件的工作示例代码(仅限C++,没有C plz)?
【问题讨论】:
标签:
c++
linux
ws-security
gsoap
【解决方案1】:
要自动将#import "wsse.h" 添加到 wsdl2h 生成的头文件(如果它不存在)(wsdl2h 使用 WS-Policy 检测 WS-Security 要求),然后首先修改 typemap.dat 以包含这三行:
[
#import "wsse.h"
]
那么(假设 C++):
- 运行
wsdl2h -Iimport -o service.h <your-wsdls-xsds-etc>并确保wsdl2h使用修改后的typemap.dat(如果它在当前目录中就可以了)并且导入选项指向gsoap import目录wsse.h
- 运行
soapcpp2 service.h
- 编译生成的
soapC.cpp、soapClient.cpp(如果是客户端)、soapServer.cpp(如果是服务器)、stdsoap2.cpp、dom.cpp、plugin/wsseapi.c、plugin/smdevp.c、plugin/mecevp.c
- 编译上面的时候一定要用
-DWITH_OPENSSL-DWITH_DOM
- 链接到
-lssl 和-lcrypto
- 启用HTTP压缩,用
-DWITH_GZIP编译并用-lz链接
在 C 中编译时,执行上述所有操作,但使用 wsdl2h 选项 -c 并使用 .c 文件。
请参阅 gsoap 包中的 WSSE documentation 和 gsoap/samples/wssedemo 示例,其中显示了以多种可能方式使用 WS-Security 的 API 调用,告诉您如何注册插件等。
【解决方案2】:
我必须在我的头文件中包含什么
#import "wsse.h"
(请参阅头文件中的 cmets,或生成的文档以获取以“Policy Enablers of Binding”开头的部分)
更新:
从生成的文档中复制和粘贴:
WS-Security (SOAP Message Security) 1.0 (accepts 1.1):
#import "wsse.h" // to be added to this header file for the soapcpp2 build step
#include "plugin/wsseapi.h"
soap_register_plugin(soap, soap_wsse); // register the wsse plugin in your code
// See the user guide gsoap/doc/wsse/html/index.html
(可以在为您的绑定生成的 doxygen 文档中找到)
另见how-to section。