首页 > 解决方案 > 如何在肥皂响应中添加标签

问题描述

使用gsoap我生成了服务器 C++ 代码。

使用 SoapUI,我向服务器发送一条消息并获得响应。直到这里一切都很好。

我想在响应中添加更多标签。为此,我操纵了服务器代码。最初由 gsoap 生成的产生响应的代码是:

if (soap_end_count(soap)
            || soap_response(soap, SOAP_OK)
            || soap_envelope_begin_out(soap)
            || soap_putheader(soap)
            || soap_body_begin_out(soap)
            || tempuri__IsAliveResponse.soap_put(soap, "tempuri:IsAliveResponse", "")
            || soap_body_end_out(soap)
            || soap_envelope_end_out(soap)
            || soap_end_send(soap))
        return soap->error;

这给了我以下回应:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tempuri="http://tempuri.org/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <tempuri:IsAliveResponse/>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

但是当我想在响应中添加更多标签时:

if (soap_end_count(soap)
            || soap_response(soap, SOAP_OK)
            || soap_envelope_begin_out(soap)
            || soap_putheader(soap)
            || soap_body_begin_out(soap)
            || tempuri__IsAliveResponse.soap_put(soap, "tempuri:IsAliveResponse", "")
            || tempuri__IsAliveResponse.soap_put(soap, "newTag", "")
            || soap_body_end_out(soap)
            || soap_envelope_end_out(soap)
            || soap_end_send(soap))
        return soap->error;

然后我得到一个削减,部分回应:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tempuri="http://tempuri.org/">
    <SOAP-ENV:Header></SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <tempuri:IsAliveResponse></tempuri:IsAliveResponse>
        <newTag></newTag>
    </SOAP-ENV:Body>
</

然后我发现Content-Length:总是524。此外,我添加的每个字符都计为2

我看不出这个固定的 524 长度在哪里决定。它是否来自缓冲区大小?如果是这样,我如何生成具有更大缓冲区大小的代码?

如何在 gsoap 生成的 C++ 肥皂服务器代码中添加更多响应数据?

标签: c++soapgsoap

解决方案


向响应中添加更多参数标签很容易。只需编辑接口 .h 文件(由 wsdl2h 生成)。这个文件有一个tempuri__IsAliveResponse类。向此类添加更多成员以添加所需的响应参数。然后让 soapcpp2 使用附加参数生成新的源代码。这些标签将出现在IsAliveResponse标签内。

要创建具有多个未嵌套在 中的标签的响应IsAliveResponse,请定义一个具有两个前导下划线的类,以使该类对序列化程序“不可见”,例如class __tempuri__MyResponse. 然后添加成员tempuri__IsAliveResponse tempuri__IsAliveResponse_(注意此处的结尾_以避免名称冲突)和您想要作为标签的其他成员。使用新类__tempuri__MyResponse作为服务操作的响应类型。


推荐阅读