Структура ответа SOAP от веб-службы ColdFusion - PullRequest
2 голосов
/ 14 мая 2009

У меня проблема с созданным веб-сервисом 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.

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

Ответы [ 2 ]

2 голосов
/ 15 мая 2009

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

uploadxmlreturn.xmlvarerrors.xmlvarerrors

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

Имеет смысл?

1 голос
/ 14 мая 2009

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

...