我正在使用gSoap库为我的Qt C ++应用程序与一些基本的Web服务进行交互。
有没有办法从soap
对象中提取即将发送/(已收到)的完整SOAP请求/(响应)消息作为XML字符串? (用于教育目的)
我知道有buf
成员,但数据需要进行一些过滤,看起来不完整。
提前致谢。
答案 0 :(得分:3)
我需要使用这个插件,因为我想在我们的日志文件中记录xml消息。此插件显示了如何重定向fsend()和frecv()函数,这些函数发送和接收xml消息。
static int plugin_send(struct soap *soap, const char *buf, size_t len)
{
struct plugin_data *data = (struct plugin_data*)soap_lookup_plugin(soap, plugin_id);
fwrite(buf, len, 1, stderr); //<-- pick up the xml from here!
return data->fsend(soap, buf, len); /* pass data on to old send callback */
}
static size_t plugin_recv(struct soap *soap, char *buf, size_t len)
{
struct plugin_data *data = (struct plugin_data*)soap_lookup_plugin(soap, plugin_id);
size_t res = data->frecv(soap, buf, len); /* get data from old recv callback */
fwrite(buf, res, 1, stderr); //<-- pick up the xml from here!
return res;
}
gSOAP用户指南中有插件部分:
答案 1 :(得分:1)
我认为buf包含来自网络的XML数据,但不一定全部都是。
如果你想这样做,你最好在gsoap中启用调试日志记录(尽管你必须重新编译才能使其工作)。
取消注释stdsoap.h中的以下DEBUG语句,然后重新编译gsoap和您的应用程序。这将导致在应用程序的工作目录中生成非常方便的日志文件:
./stdsoap2.h:/* #define DEBUG */ /* Uncomment to debug sending (in file SENT.log) receiving (in file RECV.log) and messages (in file TEST.log) */
答案 2 :(得分:0)
您必须编写一个插件才能访问XML-Messages。看一下插件目录中的pluging.h和pluging.c。