我从我正在调用的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类?
答案 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)
确保您正在解组正确类型的对象。