开箱即用,gsoap不提供任何输出验证方法(确保发送到客户端的对象序列化的模式有效性) . 我们过去已经遇到过一些验证问题,所以至少我想通过单元测试验证我们的Web服务输出 .

这个想法非常简单 . 使用gsoap映射的C类型将任意对象树放在一起,并将其传递给泛型函数

template<typename T> validate(const T& xmlObject);

然后 validate 调用 T::soap_put() 来序列化它并将结果字符串传递给 T::soap_get() 再次反序列化它,使用用 SOAP_XML_STRICT 标志初始化的新生成的soap上下文 .

但实际上,在反序列化时,gsoap似乎无法识别它在序列化时生成的名称空间前缀,从而导致形式为 "Tags '%s' and '%s' match but namespaces differ 的错误消息 . 我稍微介绍了stdsoap2.cpp中的验证代码,该代码显示失败的方法 soap_match_namespace() 与soap上下文属性 soap->local_namespaces 匹配,对于我新构建的反序列化soap上下文,该属性为空 .

我不知道如何继续这一点 . 这是预期的行为吗?无论如何应该使用 T::soap_put()T::soap_get() 方法?是否有另一种输出验证方法?