Полезная нагрузка SOAP с вложенным complexType - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь сделать запрос SOAP, где параметр является сложным типом, и у меня возникают проблемы с правильным синтаксисом.

Вот SOAP-запрос, сгенерированный SoapUI:

    <SOAP-ENV:Envelope 
            xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
            xmlns:ns1="http://Dayforce/Services/DayforceService">
        <SOAP-ENV:Body>
            <ns1:Query>
                <ns1:sessionTicket>?</ns1:sessionTicket>
                <ns1:request/>
            </ns1:Query>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

Мой вопрос - как заполнить элемент <ns1:request/>. Запрос должен быть GetReportDefinitionsRequest, и ему нужно предоставить строковое значение для XRefCode.

SoapUI здесь не сильно помогает, и у WSDL для генераторов классов, которые я пробовал, есть похожие проблемы. На данный момент я бы согласился просто знать правильный синтаксис XML

Вот соответствующие типы (также доступны в WSDL выше).

Запрос:

<xs:element name="Query">
    <xs:complexType>
        <xs:sequence>
            <xs:element minOccurs="0" name="sessionTicket" nillable="true" type="xs:string"/>
            <xs:element xmlns:q9="http://Dayforce/Services/Data" minOccurs="0" name="request" nillable="true" type="q9:DFRequest"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

GetReportDefinitionsRequest:

<xs:complexType name="GetReportDefinitionsRequest">
    <xs:complexContent mixed="false">
        <xs:extension base="tns:DFRequest">
            <xs:sequence>
                <xs:element minOccurs="0" name="XRefCode" nillable="true" type="xs:string"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
<xs:element name="GetReportDefinitionsRequest" nillable="true" type="tns:GetReportDefinitionsRequest"/>

DFRequest:

<xs:complexType name="DFRequest">
    <xs:complexContent mixed="false">
        <xs:extension base="tns:DFObject">
            <xs:sequence/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
<xs:element name="DFRequest" nillable="true" type="tns:DFRequest"/>

DFObject:

<xs:complexType name="DFObject">
    <xs:sequence/>
</xs:complexType>
<xs:element name="DFObject" nillable="true" type="tns:DFObject"/>

1 Ответ

0 голосов
/ 04 января 2019

Мне удалось запустить пример кода и подключить его, чтобы получить XML, сгенерированный для запроса. Вот результат, если в будущем это кому-нибудь поможет.

Важной частью является присвоение тегу атрибута type. Это включает импорт пространства имен http://www.w3.org/2001/XMLSchema-instance для получения атрибута типа и пространства имен http://Dayforce/Services/Data для самого типа.

    <SOAP-ENV:Envelope 
        xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:dfs="http://Dayforce/Services/DayforceService">
    <SOAP-ENV:Header/>
    <SOAP-ENV:Body>
        <dfs:Query>
            <dfs:sessionTicket>?</dfs:sessionTicket>
            <dfs:request 
                    xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
                    xmlns:dfd="http://Dayforce/Services/Data" 
                    i:type="dfd:GetReportDefinitionsRequest">
                <dfd:XRefCode>?</dfd:XRefCode>
            </dfs:request>
        </dfs:Query>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
...