javax.xml.bind.UnmarshalException:意外元素(uri:

尝试使用jaxb将xml响应转换为java对象时,我收到以下错误

javax.xml.bind.UnmarshalException: unexpected element (uri:"http://SOMETHING/doc/2006-03-01/", local:"Name"). Expected elements are ,,,,, 

这是我的XML:

   test2   3 false  metadata.xml 2012-09-04T08:29:36.000Z 6b836fd43c402681506926b2248ec418 3258 STANDARD   

我的java对象类就是这样的

  @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "name", "prefix", "marker", "maxKeys", "isTruncated", "contents" }) @XmlRootElement(name = "ListBucketResult") public class ListBucketResult { @XmlElement(name = "Name", required = true) protected String name; @XmlElement(name = "Prefix", required = true) protected String prefix; @XmlElement(name = "Marker", required = true) protected String marker; @XmlElement(name = "MaxKeys") protected int maxKeys; @XmlElement(name = "IsTruncated") protected boolean isTruncated; @XmlElement(name = "Contents", required = true) protected ListBucketResult.Contents contents; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "key", "lastModified", "eTag", "size", "storageClass" }) public static class Contents { @XmlElement(name = "Key", required = true) protected String key; @XmlElement(name = "LastModified", required = true) @XmlSchemaType(name = "dateTime") protected XMLGregorianCalendar lastModified; @XmlElement(name = "ETag", required = true) protected String eTag; @XmlElement(name = "Size") protected int size; @XmlElement(name = "StorageClass", required = true) protected String storageClass; 

最后我的解组代码是:

  JAXBContext jc = JAXBContext.newInstance(ListBucketResult.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler()); JAXBElement element = (JAXBElement) unmarshaller.unmarshal (inputStream); ListBucketResult customer = (ListBucketResult) element.getValue(); 

有人可以让我知道我做错了什么吗?

XML文档包含属于“http:// something / doc / 2006-03-01 /”命名空间的元素,但带注释的java类与该命名空间无关。 尝试将@XmlType注释更改为:

 @XmlType(name = "", namespace="http://something/doc/2006-03-01/", propOrder = { ... 

您可以在package-info类上使用@XmlSchema批注来控制命名空间限定。 如果你已经编写了一个package-info类,请确保它正在被编译(某些版本的ant在package-info类中存在问题)。

包信息

 @XmlSchema( namespace = "http://something/doc/2006-03-01/", elementFormDefault = XmlNsForm.QUALIFIED) package example; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlSchema; 

了解更多信息

我收到类似的错误org.codehaus.jackson.JsonParseExceptionjavax.xml.bind.UnmarshalException :带有链接exception:[ javax.xml.bind.UnmarshalException:unexpected element(uri:“sometext”,local:“elementA”)。 预期的要素是

这是将RESTEasySpring与使用JAXB生成的DTO集成的时候。 我用jackson进行转换。

为了解决这个问题,我在Maven依赖中引入了Jackson库,它解决了我的问题。 对此特定的jackson依赖是

   org.codehaus.jackson jackson-xc 1.9.9  

还有其他jackson的jar子,我需要的,所以我的POM基本上看起来如下。

  //The jackson-core-asl jar contains streaming JSON parser and generator interfaces and implementations  org.codehaus.jackson jackson-core-asl 1.9.9  //Ability to use JAXB annotations containing classes needed to add XML compatibility support.  org.codehaus.jackson jackson-xc 1.9.9  //Mapper jar contains functionality for data binding:  org.codehaus.jackson jackson-mapper-asl 1.9.9  //This dependency makes a JAX-RS implementation like Jersey,RESTEasy use Jackson for binding of JSON to-from Java objects  org.codehaus.jackson jackson-jaxrs 1.9.9