【问题标题】:REST xml answer - Jaxb - Amazon product APIREST xml 答案 - Jaxb - 亚马逊产品 API
【发布时间】:2013-08-04 18:43:11
【问题描述】:

我目前(正在尝试)使用亚马逊产品 API 来搜索各种商品。 我有 XML 中的响应,但我在 jaxb 中有一个例外,也许我错过了一些东西..

这是 XML:

XML response from Amazon

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

物品类别:

@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 response.openStream();

好的,我忘记了错误-_- javax.xml.bind.UnmarshalException: 意外元素(uri:“http://webservices.amazon.com/AWSECommerceService/2011-08-01”,本地:“ItemSearchResponse”)。预期元素是

谢谢!

【问题讨论】:

    标签: java rest jakarta-ee jaxb amazon


    【解决方案1】:

    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;
    

    更多信息

    【讨论】:

    • @BVMR :这是我的第一个想法……但我认为有更好的解决方案。谢谢,我会试试这个布莱斯
    • 好的,谢谢,它解决了异常问题^^。现在 AmazonItem 已创建,但它的字段为空。
    • @ogdabou - 您的对象模型和映射与您尝试解组的 XML 文档不匹配。如果您编组对象的一个​​实例,您将能够了解您当前映射的内容。如果消息有 XML Schema,您可能会发现让 JAXB 为您生成对象模型会更容易。
    【解决方案2】:

    我希望隐藏对对象的响应的顶级类应该是“ItemSearchResponse”,尝试使用成员变量“Items”创建一个类,该类又将具有另一个成员对象数组“AmazonItem”

    【讨论】:

      猜你喜欢
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多