我的一个应用程序使用 REST API 与 Amazon S3 服务器交互,对服务器执行“删除多个”操作并遇到错误响应:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>MalformedXML</Code>
<Message>The XML you provided was not well-formed or did not validate against our published schema</Message>
<RequestId>6FA...D61</RequestId>
<HostId>E5G...uhg=</HostId>
</Error>
引用亚马逊文档:
当用户发送格式错误的 xml(不存在的 xml)时,就会发生这种情况 符合已发布的 xsd) 的配置。错误信息 是,“您提供的 XML 格式不正确或未验证 反对我们发布的模式。”
我的一些应用程序的删除键包含可能会导致问题的编码字符。因此,我希望查看 Amazon 发布的架构 (XSD) 文件本身,通过验证器运行它来确定问题。
在哪里可以找到 Amazon XSD 文件?
AmazonS3.xsd 可用,但另请参阅 Amazon Simple Storage Service API 参考:
最后,特别是考虑到您对 编码字符 的担忧,请注意,您的请求实际上可能格式不正确,导致 XSD 验证无法发挥作用。 (请参阅格式良好与有效的 XML。)API 文档中提供的示例就是这种情况,这会引发您收到的相同错误:
示例 3:请求中格式错误的 XML
此示例显示 Amazon S3 如何响应包含以下内容的请求: 格式错误的 XML 文档。
索取样品
以下请求发送格式错误的 XML 文档(缺少 删除结束元素)。
POST /?delete HTTP/1.1 Host: bucketname.S3.amazonaws.com Accept: */* x-amz-date: Wed, 30 Nov 2011 03:39:05 GMT Content-MD5: p5/WA/oEr30qrEEl21PAqw== Authorization: AWS AKIAIOSFODNN7EXAMPLE:W0qPYCLe6JwkZAD1ei6hp9XZIee= Content-Length: 104 Connection: Keep-Alive <Delete> <Object> <Key>404.txt</Key> </Object> <Object> <Key>a.txt</Key> </Object>
示例响应
响应返回描述错误的错误消息。
HTTP/1.1 200 OK x-amz-id-2: P3xqrhuhYxlrefdw3rEzmJh8z5KDtGzb+/FB7oiQaScI9Yaxd8olYXc7d1111ab+ x-amz-request-id: 264A17BF16E9E80A Date: Wed, 30 Nov 2011 03:39:32 GMT Content-Type: application/xml Server: AmazonS3 Content-Length: 207 <?xml version="1.0" encoding="UTF-8"?> <Error> <Code>MalformedXML</Code> <Message>The XML you provided was not well-formed or did not validate against our published schema</Message> <RequestId>91F27FB5811111F</RequestId> <HostId>LCiQK7KbXyJ1t+tncmjRwmNoeeRNW1/ktJ61IC8kN32SFXJx7UBhOzseJCixAbcD</HostId> </Error>