2012-09-06 170 views
5

尝试使用JAXBjavax.xml.bind.UnmarshalException:意外的元素(URI:

 javax.xml.bind.UnmarshalException: unexpected element (uri:"http://SOMETHING/doc/2006-03-01/", local:"Name"). Expected elements are <{}Name>,<{}IsTruncated>,<{}MaxKeys>,<{}Contents>,<{}Prefix>,<{}Marker> 

这里来转换XML响应的Java对象时,我收到以下错误是我的XML:

 <ListBucketResult xmlns="http://something/doc/2006-03-01/"> 
      <Name>test2</Name> 
      <Prefix/> 
      <Marker/> 
      <MaxKeys>3</MaxKeys> 
      <IsTruncated>false</IsTruncated> 
      <Contents> 
        <Key>metadata.xml</Key> 
        <LastModified>2012-09-04T08:29:36.000Z</LastModified> 
        <ETag>6b836fd43c402681506926b2248ec418</ETag> 
        <Size>3258</Size> 
        <StorageClass>STANDARD</StorageClass> 
      </Contents> 
      </ListBucketResult> 

我的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(); 

有人请让我知道我在做什么不正确吗?

回答

3

XML文档包含的元素是'http:// something/doc/2006-03-01 /'命名空间的一部分,但注释的java类不与该命名空间相关联。尝试改变@XmlType注释:

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

嗨,改变这没有帮助。 \t @XmlAccessorType(XmlAccessType。FIELD) \t \t @XmlType(名称= “”,命名空间= “HTTP://东西/ DOC/2006-03-01 /”,propOrder = { \t \t “姓名”, \t \t “前缀”, \t \t “标记”, \t \t “maxKeys”, \t \t “isTruncated”, \t \t “内容” \t \t}) – Yahiya

+1

任何任何人的帮助? – Yahiya

+1

无论机制如何,问题都是一个命名空间问题。异常方法表示提供了一个完全限定名为{http:// SOMETHING/doc/2006-03-01 /} Name的元素(根据提供的xml正确),但元素{}预计名称(除其他外)。后者是默认名称空间中的一个元素。异常*现在是完全相同还是稍有变化? – dcbyers

5

您可以使用@XmlSchema注释上package-info类控制的命名空间的资格。如果您已经编写了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; 

更多信息

0

我得到类似的错误org.codehaus.jackson.JsonParseExceptionjavax.xml.bind.UnmarshalException:带有链接的异常:[javax.xml.bind.UnmarshalException:意外的元素(uri:“sometext”,local:“elementA”)。预期的元素是

这是整合的RESTEasy我的DTO的使用生成的JAXB 。我正在使用杰克逊进行转换。

为了解决这个问题,我在Maven依赖项中引入了Jackson库,它解决了我的问题。杰克逊依赖特定于这

<dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-xc</artifactId> 
     <version>1.9.9</version> 
    </dependency> 

还有其他的杰克逊罐子,以及我需要的,所以我的POM本质上看如下。

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