JAXB Unmarshal异常

时间:2011-03-07 18:07:30

标签: namespaces jaxb

我从我正在调用的Web服务响应生成的xsd中生成了一些类。 当我运行一个从Web服务调用中读入InputStream的JUnit测试类时,我得到一个Exception。 我对这个异常意味着什么感到困惑,所以我正在寻找一些关于要检查的事情的想法:

javax.xml.bind.UnmarshalException: Unexpected element {http://bar.foo.com/bbs}:rule

我在生成的课程中有一个课程:

com.foo.bar.bbs.Rule

Exception是否意味着我没有在适当的包中使用Rule类?

2 个答案:

答案 0 :(得分:3)

以下是要检查的内容:

<强> @XmlRootElement

检查Rule类是否使用@XmlRootElement注释:

@XmlRootElement
public class Rule {
}

<强> @XmlElementDecl

或者ObjectFactory类中有相应的@XmlElementDecl:

@XmlElementDecl(namespace = "http://bar.foo.com/bbs", name = "root")
public JAXBElement<Root> createCustomer(Root value) {
    return new JAXBElement<BigInteger>(_ROOT_QNAME, Root.class, null, value);
}

<强> @XmlSchema

您还需要确保正确指定名称空间信息。 package-info类可能会为您生成类似下面的内容。确保指定了正确的命名空间。

@XmlSchema( 
    namespace = "http://bar.foo.com/bbs", 
    elementFormDefault = XmlNsForm.QUALIFIED) 
package com.foo.bar.bbs;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

或者,您可以在@XmlRootElement注释中包含命名空间:

@XmlRootElement(namespace="http://bar.foo.com/bbs")
public class Rule {
}

有关详细信息,请参阅:

答案 1 :(得分:0)

确保您正在解组正确类型的对象。