ColdFusion Web服务的SOAP响应结构

时间:2009-05-14 11:10:10

标签: .net xml web-services 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中找到解决方法。

关于如何解决这个问题的想法将非常感激。

2 个答案:

答案 0 :(得分:2)

您是如何访问xmlValErrors的?因为您的错误数组位于父xmlVarErrors中,所以您希望像以下一样访问它:

uploadxmlreturn.xmlvarerrors.xmlvarerrors

第一个xmlvarerrors指向父级,第二个指向错误数组。

有意义吗?

答案 1 :(得分:1)

XML和SOAP都不是我的强项,但xmlValErrors的子元素也不应该被称为“xmlValErrors”。你不希望它们都是“xmlValError”吗?