Jaxb2Marshaller在春天解组 - 意想不到的元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jaxb2Marshaller在春天解组 - 意想不到的元素相关的知识,希望对你有一定的参考价值。
我是使用Jaxb进行解组的新手,但我认为我已经完成了所有配置,但是我在运行时遇到了这个错误:
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://xml.product.place.com/prod/alerts/v_1_0", local:"Record"). Expected elements are (none)
我正在使用基于几个XSD的JaxB生成的POJO来解组一个非常复杂的XML文件。
这是XML的相关部分:
<PlaceAlerts xmlns="http://xml.product.place.com/prod/alerts/v_1_0"">
<Information>
<ReportType>EIFK</ReportType>
<Number>401ZC00155</Number>
<ReportDate>2005-02-05</ReportDate>
</Information>
<Record>
<id>123</id>
<cid><![CDATA[12327*312457495]]></ccid>
...
</PlaceAlerts>
XML文件继续,但错误出现在Record开始标记上。
这是Record.java:
package com.etc.etc.etc;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"id",
"cid",
"alerts"
})
@XmlRootElement(name = "Record")
public class Record {
@XmlElement(required = true)
protected Object id;
@XmlElement(required = true)
protected Object cid;
@XmlElement(name = "Alerts", required = true)
protected Alerts alerts;
public Object getId() {
return id;
}
public void setId(Object value) {
this.id = value;
}
public Object getCid() {
return cid;
}
public void setCid(Object value) {
this.cid = value;
}
public Alerts getAlerts() {
return alerts;
}
public void setAlerts(Alerts value) {
this.alerts = value;
}
}
和bean声明:
<bean id="unmarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="packagesToScan">
<list>
<value>com.etc.etc.etc.*</value>
</list>
</property>
</bean>
有什么想法吗?如果您需要查看其他任何内容,请告知我们。
答案
我弄清楚了问题,但不是问题的根本原因。我将“packagesToScan”属性更改为“classesToBeBound”属性。出于某种原因,我不认为这些类被包模式匹配器拾取。这是我改为:
<bean id="unmarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>com.etc.etc.etc.Alert</value>
<value>com.etc.etc.etc.Channel</value>
etc...
</list>
</property>
</bean>
如果有人对于为什么packageToScan没有按照我的预期工作有任何见解,我很乐意听到它。
另一答案
为了使用“packagesToScan”,我相信package-info.java类应该出现在你已经从Schema(XSD)生成类的java包中。
以上是关于Jaxb2Marshaller在春天解组 - 意想不到的元素的主要内容,如果未能解决你的问题,请参考以下文章