как добавить тег в мыльный ответ - PullRequest
0 голосов
/ 07 мая 2019

Использование 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. Это происходит от размера буфера? Если да, то как я могу сгенерировать код с большим размером буфера?

Как я могу добавить больше данных об ответе в коде мыльного сервера C ++, сгенерированном gsoap?

1 Ответ

0 голосов
/ 07 мая 2019

Добавить больше тегов параметров в ответ легко. Просто отредактируйте файл интерфейса .h (сгенерированный wsdl2h). Этот файл имеет класс tempuri__IsAliveResponse. Добавьте больше членов в этот класс, чтобы добавить нужные параметры ответа. Затем позвольте soapcpp2 сгенерировать свежий исходный код с дополнительными параметрами. Эти теги появятся в теге IsAliveResponse.

Чтобы создать ответ с несколькими тегами, которые не вложены в IsAliveResponse, определите класс с двумя ведущими подчеркиваниями, чтобы сделать этот класс «невидимым» для сериализатора, например class __tempuri__MyResponse. Затем добавьте элемент tempuri__IsAliveResponse tempuri__IsAliveResponse_ (обратите внимание на окончание _ здесь, чтобы избежать конфликта имен) и другие элементы, которые вы хотите использовать в качестве тегов. Используйте новый класс __tempuri__MyResponse в качестве типа ответа для операции службы.

...