Структура ответа SOAP от веб-сервиса ColdFusion

У меня возникла проблема с созданным мной веб-сервисом ColdFusion. Служба принимает XML-данные в кодировке Base64, а затем записывает их на диск для целей архивирования. Затем этот файл подвергается базовой проверке схемы, и пользователю сообщается обо всех ошибках следующим образом:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <UploadXMLResponse xmlns="http://url">
            <UploadXMLReturn>
                <AuthMessage>Authentication successful</AuthMessage>
                <AuthStatus>Success</AuthStatus>
                <FileInfo>File Example.xml was successfully uploaded</FileInfo>
                <UploadStatus>Success</UploadStatus>
                <xmlValErrors>
                    <xmlValErrors xsi:type="xsd:string">1824</xmlValErrors>
                    <xmlValErrors xsi:type="xsd:string">Error Message</xmlValErrors>
                    <xmlValErrors xsi:type="xsd:string">23</xmlValErrors>
                    <xmlValErrors xsi:type="xsd:string">1824</xmlValErrors>
                    <xmlValErrors xsi:type="xsd:string">Error Message</xmlValErrors>
                    <xmlValErrors xsi:type="xsd:string">38</xmlValErrors>
                </xmlValErrors>
                <xmlValMessage>Schema validation generated errors</xmlValMessage>
                <xmlValStatus>Failure</xmlValStatus>
            </UploadXMLReturn>
        </UploadXMLResponse>
    </soapenv:Body>
</soapenv:Envelope>

Проблема в том, что элемент <xmlValErrors> вложен несколько странным образом. Это связано с тем, как ColdFusion обрабатывает массив ошибок. В результате, когда пользователь пытается проанализировать ответ, он может видеть только начальный элемент <xmlValErrors>.

.Net здесь представляет собой особую проблему, так как он видит элемент <xmlValErrors> как пустой массив, хотя он явно содержит множество других элементов.

Я подозреваю, что проблема заключается в повторном использовании имени дочерних элементов внутри элемента <xmlValErrors>. Однако я не смог найти способ обойти это в ColdFusion.

Мысли о том, как это может быть решено, будут очень признательны.


person Neil Albrock    schedule 14.05.2009    source источник


Ответы (2)


Как вы обращались к xmlValErrors? Поскольку ваш массив ошибок находится внутри родительского xmlVarErrors, вы хотите получить к нему доступ следующим образом:

uploadxmlreturn.xmlvarerrors.xmlvarerrors

Первый xmlvarerrors указывает на родителя, второй — на массив ошибок.

Есть смысл?

person Raymond Camden    schedule 15.05.2009

Ни XML, ни SOAP не являются моей сильной стороной, но не следует также называть подэлементы xmlValErrors "xmlValErrors". Разве вы не хотите, чтобы каждый из них был "xmlValError"?

person ale    schedule 14.05.2009
comment
Ал, это как раз моя проблема. Я надеюсь, что кто-то может ответить на него с точки зрения того, как Coldfusion структурирует вывод. Или предложить решение, позволяющее .Net видеть дочерние элементы, даже несмотря на то, что они так раздражающе названы. - person Neil Albrock; 15.05.2009