Java JAXB XML解析AWS S3 Bucket XML时不解析任何内容

Java JAXB XML解析AWS S3 Bucket XML时不解析任何内容,java,xml,amazon-s3,jaxb,Java,Xml,Amazon S3,Jaxb,我目前正在尝试使用JAXB库解析AWS S3 Bucket的XML输出。我没有收到任何错误,尽管ListBucketObject没有得到任何内容。我尝试过向JavaPOJO模型添加XmlAccessorTypes,但收效甚微。有什么建议吗 XML Owner.java package parseXML; public class Owner { private String ID; private String DisplayName; public String g

我目前正在尝试使用JAXB库解析AWS S3 Bucket的XML输出。我没有收到任何错误,尽管ListBucketObject没有得到任何内容。我尝试过向JavaPOJO模型添加XmlAccessorTypes,但收效甚微。有什么建议吗

XML

Owner.java

package parseXML;

public class Owner {
    private String ID;
    private String DisplayName;

    public String getID() {
        return ID;
    }
    public void setID(String iD) {
        ID = iD;
    }
    public String getDisplayName() {
        return DisplayName;
    }
    public void setDisplayName(String displayName) {
        DisplayName = displayName;
    }
    
    
}


以下是几点观察:

  • 处理名称空间

  • getter、setter和字段名

  • 处理命名空间

    而不是像这样在
    ListBucketResult
    类的根元素上声明名称空间:

    @XmlRootElement(name = "ListBucketResult", namespace = "http://s3.amazonaws.com/doc/2006-03-01/")
    
    改用这个:

    @XmlRootElement(name = "ListBucketResult")
    
    对于名称空间,在
    package info.java
    文件中处理它。这是在
    parseXML
    包中创建的,与类的创建方式相同,但包含以下内容:

    @XmlSchema(
            namespace = "http://s3.amazonaws.com/doc/2006-03-01/",
            elementFormDefault = XmlNsForm.QUALIFIED)
    package parseXML;
    
    import javax.xml.bind.annotation.XmlSchema;
    import javax.xml.bind.annotation.XmlNsForm;
    
    这确保了XML文件中的所有元素都是限定的,而不仅仅是那些与
    ListBucketResult
    类中的字段相关的元素

    getter、setter和字段名

    我认为您命名Java字段的方式给getter/setter带来了问题,因为它们不符合JavaBeans命名约定

    示例:在您的
    列表BucketResult
    中,您有以下内容:

    private List<Contents> Contents;
    
    public List<Contents> getContents() {
        return Contents;
    }
    
    public void setContents(List<Contents> contents) {
        Contents = contents;
    }
    
    然后,在
    Contents
    类中,我必须执行类似的操作-例如(同样,忽略除
    key
    之外的所有字段):

    如果对类中的其余字段重复此过程,则将拥有完全填充的Java对象

    结果

    通过仅进行上述更改,我的驱动程序代码(与您的代码相同)现在打印出以下结果:

    202008281741/
    202008281741/161_209_2_0_255_1_97_InitializedAnalysis_219_0m(AMSL)_0.000000_-1_-1.000000_-1.000000
    202008281741/161_209_2_1_255_1_97_InitializedAnalysis_219_0m(AMSL)_0.000000_-1_-1.000000_-1.000000
    202008281741/161_209_2_2_255_1_97_InitializedAnalysis_219_0m(AMSL)_0.000000_-1_-1.000000_-1.000000
    202008281741/161_209_2_3_255_1_97_InitializedAnalysis_219_0m(AMSL)_0.000000_-1_-1.000000_-1.000000
    test/
    test/33.txt
    

    通过对所有剩余字段名应用相同的更改,您将能够处理完整的XML文件。

    以下几点:

  • 处理名称空间

  • getter、setter和字段名

  • 处理命名空间

    而不是像这样在
    ListBucketResult
    类的根元素上声明名称空间:

    @XmlRootElement(name = "ListBucketResult", namespace = "http://s3.amazonaws.com/doc/2006-03-01/")
    
    改用这个:

    @XmlRootElement(name = "ListBucketResult")
    
    对于名称空间,在
    package info.java
    文件中处理它。这是在
    parseXML
    包中创建的,与类的创建方式相同,但包含以下内容:

    @XmlSchema(
            namespace = "http://s3.amazonaws.com/doc/2006-03-01/",
            elementFormDefault = XmlNsForm.QUALIFIED)
    package parseXML;
    
    import javax.xml.bind.annotation.XmlSchema;
    import javax.xml.bind.annotation.XmlNsForm;
    
    这确保了XML文件中的所有元素都是限定的,而不仅仅是那些与
    ListBucketResult
    类中的字段相关的元素

    getter、setter和字段名

    我认为您命名Java字段的方式给getter/setter带来了问题,因为它们不符合JavaBeans命名约定

    示例:在您的
    列表BucketResult
    中,您有以下内容:

    private List<Contents> Contents;
    
    public List<Contents> getContents() {
        return Contents;
    }
    
    public void setContents(List<Contents> contents) {
        Contents = contents;
    }
    
    然后,在
    Contents
    类中,我必须执行类似的操作-例如(同样,忽略除
    key
    之外的所有字段):

    如果对类中的其余字段重复此过程,则将拥有完全填充的Java对象

    结果

    通过仅进行上述更改,我的驱动程序代码(与您的代码相同)现在打印出以下结果:

    202008281741/
    202008281741/161_209_2_0_255_1_97_InitializedAnalysis_219_0m(AMSL)_0.000000_-1_-1.000000_-1.000000
    202008281741/161_209_2_1_255_1_97_InitializedAnalysis_219_0m(AMSL)_0.000000_-1_-1.000000_-1.000000
    202008281741/161_209_2_2_255_1_97_InitializedAnalysis_219_0m(AMSL)_0.000000_-1_-1.000000_-1.000000
    202008281741/161_209_2_3_255_1_97_InitializedAnalysis_219_0m(AMSL)_0.000000_-1_-1.000000_-1.000000
    test/
    test/33.txt
    
    通过对所有剩余字段名应用相同的更改,您将能够处理完整的XML文件

    202008281741/
    202008281741/161_209_2_0_255_1_97_InitializedAnalysis_219_0m(AMSL)_0.000000_-1_-1.000000_-1.000000
    202008281741/161_209_2_1_255_1_97_InitializedAnalysis_219_0m(AMSL)_0.000000_-1_-1.000000_-1.000000
    202008281741/161_209_2_2_255_1_97_InitializedAnalysis_219_0m(AMSL)_0.000000_-1_-1.000000_-1.000000
    202008281741/161_209_2_3_255_1_97_InitializedAnalysis_219_0m(AMSL)_0.000000_-1_-1.000000_-1.000000
    test/
    test/33.txt