【问题标题】:Where can I find Amazon's published S3 XSD (XML Schema Definition)?我在哪里可以找到 Amazon 发布的 S3 XSD(XML 架构定义)?
【发布时间】:2016-03-20 22:40:25
【问题描述】:

我的一个应用程序,使用 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>

引用Amazon documentation

当用户发送格式错误的 xml(不 符合已发布的 xsd) 的配置。错误信息 是,“您提供的 XML 格式不正确或未经验证 反对我们发布的架构。”

我的一些应用删除键包含可能导致问题的编码字符。因此,我希望查看 Amazon 发布的架构 (XSD) 文件本身,通过验证器运行它以确定问题。

在哪里可以找到 Amazon XSD 文件?

【问题讨论】:

    标签: xml amazon-web-services amazon-s3 xsd


    【解决方案1】:

    AmazonS3.xsd可用,也可咨询Amazon Simple Storage Service API Reference

    最后,特别是考虑到您对编码字符 的担忧,请注意,您的请求有可能实际上格式不正确,因此 XSD 验证无法发挥作用。 (请参阅Well-formed vs Valid 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>
    

    【讨论】:

    • 感谢您的深思熟虑的帖子。正如我在之前的评论中所写的,我的程序(实际上是一个回归测试套件,始终对 Amazon S3 执行相同的测试)一直成功运行到今天早上。我反复收到 MalformedXML 错误大约一个小时,但现在它像冠军一样成功地备份和运行。我已经“战斗”并赢得了 Amazon S3 的所有编码问题,所以我知道字符编码是正确的。 XML 的格式绝对正确,因为它已经通过了多个在线 XML 验证器应用程序。感谢您的帖子!
    • 我看到您根据 SO 政策从我的原始帖子中编辑了我的感谢。我对此没有意见——感谢别人只是我的一个弱点。针对此类问题的 SO 政策是什么?
    • 不客气,提前感谢不是恶习,真的:-),只是不必要的噪音。大部分编辑是在标题中添加“S3”,但当我在那里时,我也敲响了最后的感谢。见What should I keep out of my posts and titles?
    • 回到您问题的实质:我建议您在收到质疑请求格式正确性或有效性的错误响应时记录请求。在您的问题中发布请求会使回答您的问题变得更加容易(实际上,对您和我们来说可能一样多)。
    • 首先,感谢您提供指向 SO 政策的链接(哎呀,我又来了 )——有趣的信息。其次,在技术上更重要的是,我确定了为什么我的请求偶尔会失败。今天早上我在家工作并通过我家的 ISP 连接到 S3 服务器。此 ISP 执行家长控制内容过滤(例如,不适合儿童),但他们搞砸了 SSL/TLS 证书处理,导致 TLS 问题。当我通过未经过滤的工作 ISP 连接时,一切都像魅力一样。 Moral: don't do development work on a parental control internet connection!
    【解决方案2】:

    【讨论】:

    • 我没有提到我使用的是 AWS Authentication Signature 版本 4,而不是版本 2。此架构是否适用于两个签名版本?我问这个是因为我通过 xmlvalidation.com 运行了我的 XML 和架构,并且没有返回相关错误。版本 4 是否还有其他架构?
    • 签名版本不会改变 XML 要求。请考虑编辑问题以添加MCVE
    • @Michael-sqlbot 情节变厚了 。我的程序一直正常运行,直到今天早上我收到 MalformedXML 错误响应。在连续几次重新运行和随后的 MalformedXML 失败持续大约一个小时之后,现在一切都恢复正常,没有 XML 错误。因此,MCVE 将难以重现。如果它再次发生,我肯定会将问题减少到最小的 Amazon S3 请求。尽管如此,令人担忧的是,S3 服务器可能反复无常,无缘无故地失败。
    猜你喜欢
    • 2011-05-09
    • 2018-08-04
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    相关资源
    最近更新 更多