gsoap入门:gsoap的plugin机制说明塈使用plugin实现调试soap函数时显示request/response xml文本

昨天调用gsoap函数时出错了,通过输出错误信息,知道了是服务器端的错误(参见前一篇博客《gsoap入门:获取gsoap的错误信息》)。
但仍然是一头雾水,不知道服务器端为什么报错,还需要更详细的信息,所以想到了能不能获取ressponse xml。
于是满世界找如何能获取gsop发送和接收的xml文本的办法,在google上找到了线索:gsoap的插件(plugin)机制
gsoap 的插件是对gsoap进行功能扩展的一种便利机制,类似callback回调函数(或者类似java或c++的接口)。通过对soap对象添加用户自定义的插件,可以让插件中的callbacks函数重载soap原来的函数,让callbacks函数获取对gsoap的完全访问。在向soap对象注册了指定插件后,用户自定义的callbacks函数就接管了gosp中的核心调用(比如fsend,frecv),在此基础上用户可以对gsoap的进行功能扩展。
下面是注册和搜索插件的函数:

int soap_register_plugin_arg(struct soap *soap, int (*fcreate)(struct soap *soap, struct soap_plugin p, void arg), void arg)
void
soap_lookup_plugin(struct soap
, const char
);

关于plugin机制更的官方说明参见[《gSOAP Plug-ins》][1]

gsoap的plugin文件夹下提供了不少成熟的插件代码,这些可以直接拿来使用,关于这些插件的说明也请参见[《gSOAP Plug-ins》][1]。

显示requese/response xml

这些插件中的一个基本的例子:plugin.c,plugin.h,就实现了显示requese/response xml的功能。
首先将plugin.c,plugin.h两个文件复制到自己项目代码路径下,并将plugin.c加入项目代码。
这里写图片描述

然后在用到plugin.c中函数的代码文件中加入#include "plugin.h"

并在soap_init之后加入下面的代码,将plugin注册到soap对象中。

soap_register_plugin(&soap, plugin);

test_gsoap.cp代码示例:

#include <sstream>
#include "FaceDbServiceSoap11Binding.nsmap"
#include "file_utilits.h"
#include "stdlib.h"
#include "plugin.h"
using namespace facedbservice;
int main(int argc, char * argv[]) {
	struct soap soap;
	soap_init(&soap);
	// 注册plugin插件显示request/response xml文本
	soap_register_plugin(&soap, plugin);
	_ns1__sdk_USCOREdetectFace param;
	_ns1__sdk_USCOREdetectFaceResponse ret;
	auto img_file= gdface::load_binary_file("d:\\tmp\\he049.jpg");
	xsd__base64Binary b;
	b.soap = &soap;
	b.__ptr = img_file.data();
	b.__size = img_file.size();
	param.imgData = &b;
	// soap调用
	soap_call___ns1__sdk_USCOREdetectFace(&soap,"http://gdface.wicp.net:15865/axis2/services/FaceDbService.FaceDbServiceHttpSoap12Endpoint/",nullptr, &param,ret);
	if (soap.error!= SOAP_OK) {
		soap_stream_fault(&soap, std::cerr);
	}else {
		for (auto code : ret.return_) {
			std::printf("soap err,errcode = (%d,%d,%d,%d)\n", *(code->pos->left), *(code->pos->top), *(code->pos->width), *(code->pos->height));
		}
	}
}

这样在调用soap函数的时候,就会自动显示request/response的xml文本。

这里写图片描述
[1]:http://www.genivia.com/doc/soapdoc2.html#tth_sEc19.39

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值