gsoap将anyAttribute转换为自定义类型

时间:2015-12-09 15:02:12

标签: c++ xml wsdl gsoap

使用gsoap,我为soap服务器创建了一个客户端。 在我创建源代码的wsdl中,有一个类型为wsnt中定义的NotificationMessage类型的元素。
有没有办法将其转换为自定义对象?
我需要以下内容:

/* get response */
_wsnt__NotificationMessageHolderType_Message message = response.Message;
if (message is _tt__Message)
{
    _tt__Message m = message as _tt__Message;
    /* do something with m */
} else if (message is std::string) {
    std::string str = message as std::string;
    /* do something with str */
} else {
    Warning("Unrecognized type");
}

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

也许使用wsdl2h选项-d?这会生成添加DOM支持的代码(不要同时使用选项-x)。

DOM节点图xsd__anyType包含Message的内容。 DOM内容可以设置和读取,也可以包含可序列化的数据,如XML DOM and XPath中针对gSOAP所述。

要在XML DOM中启用C / C ++的序列化,请使用SOAP_DOM_NODE。 XML元素标记名称应与C / C ++类型的名称匹配,以将其自动反序列化为C / C ++对象。

因为_wsnt__NotificationMessageHolderType_Message类是嵌入式的,所以你不能像typemap.dat那样给出全局定义的类的重写定义(至少不是gSOAP高达2.8.28)。