Java 如何使用JAXB将XML转换为对象

Java 如何使用JAXB将XML转换为对象,java,jaxb,jersey,dropwizard,Java,Jaxb,Jersey,Dropwizard,我的客户正在使用DropWizard/Jersey 我得到了一个xml形式的响应。看起来是这样的: JAXBContext context = JAXBContext.newInstance(AmazonItem.class); Unmarshaller unMarshaller = context.createUnmarshaller(); newItem = (AmazonItem) unMarshaller.unmarshal(respons

我的客户正在使用DropWizard/Jersey

我得到了一个xml形式的响应。看起来是这样的:

        JAXBContext context = JAXBContext.newInstance(AmazonItem.class);
        Unmarshaller unMarshaller = context.createUnmarshaller();
        newItem = (AmazonItem) unMarshaller.unmarshal(response);

我创建了一个名为
package info.java
的文件,其中包含以下内容:

@XmlSchema(
        namespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01",
        elementFormDefault = XmlNsForm.QUALIFIED)

package com.aerstone.services.core.handlerpojos.amazon;


import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
最后,我有一个像这样的POJO。现在我只是想把标题和ASIN对应起来

@XmlRootElement(name="ItemSearchResponse")
public class AmazonItem
{
    private String name;
    private String asin;

    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; }
}
我是这样使用它的:

        JAXBContext context = JAXBContext.newInstance(AmazonItem.class);
        Unmarshaller unMarshaller = context.createUnmarshaller();
        newItem = (AmazonItem) unMarshaller.unmarshal(response);
但我得到了一个错误:

! javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"ItemLookupResponse"). Expected elements are <{http://webservices.amazon.com/AWSECommerceService/2011-08-01}ItemSearchResponse>
!javax.xml.bind.UnmarshaleException:意外元素(uri:,local:“ItemLookupResponse”)。预期的要素是

您正试图对以以下内容开头的文档进行解组:

<ItemLookupRespons>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">

而不是问题中以以下开头的XML文档:

<ItemLookupRespons>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">

如果您是从一个XML模式创建JAXB模型的,其中您试图解组的文档是有效的,那么您应该在生成的模型的包名上创建
JAXBContext
,或者在生成的
ObjectFactory
类上创建
JAXBContext
,以拉入模型的所有类