java - 尝试将 XML 映射到 POJO 时出现 "unexpected element"

标签 java xml jaxb

我正在尝试使用 JAXB 将以下 XML 映射到 POJO,以便我可以使用 XML 中的数据,但是,我收到以下错误:

! javax.xml.bind.UnmarshalException: unexpected element 
(uri:"http://webservices.amazon.com/AWSECommerceService/2011-08-01", 
local:"ItemSearchResponse"). Expected elements are <{}ItemSearchResponse>

XML:

<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
    <Items>
        <Item>
            <ASIN>B001DJLCRC</ASIN>
            <DetailPageURL>
                http://www.amazon.com/Breaking-Bad-Complete-First-Season/dp/B001DJLCRC%3FSubscriptionId%3DAKIAJ6JZ43XIWIUIIQLA%26tag%3Dsample026-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB001DJLCRC
            </DetailPageURL>
            <ItemLinks>
                <ItemLink>
                    <Description>Technical Details</Description>
                    <URL>
                        http://www.amazon.com/Breaking-Bad-Complete-First-Season/dp/tech-data/B001DJLCRC%3FSubscriptionId%3DAKIAJ6JZ43XIWIUIIQLA%26tag%3Dsample026-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB001DJLCRC
                    </URL>
                </ItemLink>
            </ItemLinks>
            <ItemAttributes>
                <Actor>Bryan Cranston</Actor>
                <Actor>Aaron Paul</Actor>
                <Manufacturer>Sony Pictures Home Entertainment</Manufacturer>
                <ProductGroup>DVD</ProductGroup>
                <Title>Breaking Bad: The Complete First Season</Title>
            </ItemAttributes>
        </Item>
    </Items>
</ItemSearchResponse>

我的 POJO(问题中故意跳过了 getter/setter)

ItemSearchResponse

@XmlRootElement(name="ItemSearchResponse")
@XmlAccessorType(XmlAccessType.FIELD)
public class ItemSearchResponse
{
    @XmlElement(name="Items")
    private Items items = null;
}

项目

@XmlAccessorType(XmlAccessType.FIELD)
public class Items {
    @XmlElement(name="Item")
    List<Item> items = new ArrayList();
}

项目

@XmlAccessorType(XmlAccessType.FIELD)
public class Item {
    @XmlElement(name="ASIN")
    private String asin;
    @XmlElement(name="ItemAttributes")
    private ItemAttributes attributes;
}

元素属性

@XmlAccessorType(XmlAccessType.FIELD)
public class ItemAttributes {
    @XmlElement(name="Title")
    private String title;
    @XmlElement(name="Author")
    private String author;
}

问题

  • 如何解决错误?我的 POJO 设置不正确吗?如果是这样,我应该如何重新构造 POJO?

  • xml中有多个Author。我如何将它们映射到数组或排序列表。

最佳答案

您需要使用包级 @XmlSchema 注释来映射模型的 namespace 限定。

package-info.java

@XmlSchema( 
    namespace = "http://www.example.org/package", 
    elementFormDefault = XmlNsForm.QUALIFIED) 
package example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

了解更多信息

关于java - 尝试将 XML 映射到 POJO 时出现 "unexpected element",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22212660/

相关文章:

java - JAX-B 中的映射序列化会产生不需要的 XML 命名空间和前缀

java - 如何在 Response 上调用 readEntity 两次?

java - xjc 仅用于模式的一部分

java - 在hadoop中启动namenode失败?

java - 如何将单个对象分配给所选微调器项中的字符串变量

java - 将 XML 转换为属于同一模式的不同版本且稍有不同的 XML

javascript - 如何在 JavaScript 中解析来自 API 的 XML 响应?

java - HtmlUnit 中切换窗口

java - 在 Hibernate 中使用更新但仍要创建表

C# 停止类序列化