javax.xml.bind.UnmarshalException: 意外元素 (uri: [英] javax.xml.bind.UnmarshalException: unexpected element (uri:

查看:63
本文介绍了javax.xml.bind.UnmarshalException: 意外元素 (uri:的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试使用 jaxb 将 xml 响应转换为 java 对象时出现以下错误

I am getting the following error when trying to convert xml response to java objects using jaxb

       javax.xml.bind.UnmarshalException: unexpected element (uri:"http://SOMETHING/doc/2006-03-01/", local:"Name"). Expected elements are <{}Name>,<{}IsTruncated>,<{}MaxKeys>,<{}Contents>,<{}Prefix>,<{}Marker>

这是我的 XML:

       <ListBucketResult xmlns="http://something/doc/2006-03-01/">
           <Name>test2</Name>
            <Prefix/>
            <Marker/>
            <MaxKeys>3</MaxKeys>
            <IsTruncated>false</IsTruncated>
            <Contents>
                  <Key>metadata.xml</Key>
                  <LastModified>2012-09-04T08:29:36.000Z</LastModified>
                    <ETag>6b836fd43c402681506926b2248ec418</ETag>
                    <Size>3258</Size>
                   <StorageClass>STANDARD</StorageClass>
             </Contents>
          </ListBucketResult>

我的java对象类是这样的

And my java object classes are something like this

            @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "name",
        "prefix",
        "marker",
        "maxKeys",
        "isTruncated",
        "contents"
    })
    @XmlRootElement(name = "ListBucketResult")
    public class ListBucketResult {

@XmlElement(name = "Name", required = true)
protected String name;
@XmlElement(name = "Prefix", required = true)
protected String prefix;
@XmlElement(name = "Marker", required = true)
protected String marker;
@XmlElement(name = "MaxKeys")
protected int maxKeys;
@XmlElement(name = "IsTruncated")
protected boolean isTruncated;
@XmlElement(name = "Contents", required = true)
protected ListBucketResult.Contents contents;







         @XmlAccessorType(XmlAccessType.FIELD)
         @XmlType(name = "", propOrder = {
                "key",
                "lastModified",
                   "eTag",
                   "size",
                 "storageClass"
           })
          public static class Contents {

    @XmlElement(name = "Key", required = true)
    protected String key;
    @XmlElement(name = "LastModified", required = true)
    @XmlSchemaType(name = "dateTime")
    protected XMLGregorianCalendar lastModified;
    @XmlElement(name = "ETag", required = true)
    protected String eTag;
    @XmlElement(name = "Size")
    protected int size;
    @XmlElement(name = "StorageClass", required = true)
    protected String storageClass;

最后我的解组代码是:

                          JAXBContext jc = JAXBContext.newInstance(ListBucketResult.class);
            Unmarshaller unmarshaller = jc.createUnmarshaller();
            unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());
               JAXBElement element = (JAXBElement) unmarshaller.unmarshal (inputStream);
            ListBucketResult customer = (ListBucketResult) element.getValue();

有人可以让我知道我做错了什么吗?

Could someone please let me know what am i doing incorrect ?

推荐答案

XML 文档包含的元素属于 'http://something/doc/2006-03-01/' 命名空间的一部分,但带有注释的 java 类与该命名空间无关.尝试将@XmlType 注释更改为:

The XML document contains elements which are part of the 'http://something/doc/2006-03-01/' namespace, but the annotated java class is not associated with that namespace. Try changing the @XmlType annotation to:

@XmlType(name = "", namespace="http://something/doc/2006-03-01/", propOrder = { ...

这篇关于javax.xml.bind.UnmarshalException: 意外元素 (uri:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆