我遇到的问题是我创建的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中找到解决方法。
关于如何解决这个问题的想法将非常感激。
答案 0 :(得分:2)
您是如何访问xmlValErrors的?因为您的错误数组位于父xmlVarErrors中,所以您希望像以下一样访问它:
uploadxmlreturn.xmlvarerrors.xmlvarerrors
第一个xmlvarerrors指向父级,第二个指向错误数组。
有意义吗?
答案 1 :(得分:1)
XML和SOAP都不是我的强项,但xmlValErrors的子元素也不应该被称为“xmlValErrors”。你不希望它们都是“xmlValError”吗?