REST xml应答-Jaxb-亚马逊产品API



我目前正在(尝试)使用亚马逊产品API来搜索急需的物品。我有XML中的响应,但jaxb中有一个异常,可能我错过了什么。。

这是XML:

亚马逊的XML响应

我想提取物品信息,但遇到了一些麻烦。

物品类别:

@XmlRootElement(name="ItemSearchResponse")
public class AmazonItem
{
    private String name;
    private String asin;
    private String price;
    public AmazonItem()
    {
    }
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlElement(name="Title")
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlElement(name="ASIN")
    public String getAsin()
    {
        return asin;
    }
    public void setAsin(String asin)
    {
        this.asin = asin;
    }
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlElement(name="FormattedPrice")
    public String getPrice()
    {
        return price;
    }
    public void setPrice(String price)
    {
        this.price = price;
    }
}

我的建设者:

public class AmazonItemBuilder
{
    public AmazonItemBuilder()
    {
    }
    public List<AmazonItem> build(InputStream response)
    {
        try
        {
            JAXBContext context = JAXBContext.newInstance(AmazonItem.class);
            Unmarshaller unMarshaller = context.createUnmarshaller();
            AmazonItem newItem = (AmazonItem) unMarshaller.unmarshal(response);
            System.out.println(newItem);
        }
        catch (JAXBException e)
        {
            e.printStackTrace();
        }
        return null;
    }
}

"响应"来自URL响应.openStream();

好的,我忘记了错误-_-javax.xml.bind.UnmarshalException:意外元素(uri:"http://webservices.amazon.com/AWSECommerceService/2011-08-01",local:"ItemSearchResponse")。预期元素为<{}ItemSearchResponse>

谢谢!

XML文档似乎是命名空间限定的。您可以使用包级别的@XmlSchema位置注释来指定整个文档的命名空间限定。包级别的注释进行一个名为package-info的特殊调用,如下所示:

包裹信息

@XmlSchema(
    namespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01",
    elementFormDefault = XmlNsForm.QUALIFIED)
package com.your.pkg;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

有关更多信息

  • http://blog.bdoughan.com/2010/08/jaxb-namespaces.html

我希望将响应转换为对象的顶级类应该是"ItemSearchResponse",尝试创建一个具有成员变量"Items"的类,该类将具有另一个成员对象数组"AmazonItem"

最新更新