Java 如何使用JAXB将XML转换为对象
我的客户正在使用DropWizard/Jersey 我得到了一个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
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
,以拉入模型的所有类