我目前(正在尝试)使用亚马逊产品 API 来搜索商品。 我有 XML 的响应,但我在 jaxb 中有一个例外,也许我错过了什么..
这是 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 response.openStream();
OK我忘了错误-_- javax.xml.bind.UnmarshalException: 意外元素(uri:“http://webservices.amazon.com/AWSECommerceService/2011-08-01”,本地:“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;
更多信息
我希望隐藏对对象的响应的顶级类应该是“ItemSearchResponse”,尝试创建一个具有成员变量“Items”的类,该类又将具有另一个成员对象数组“AmazonItem”