簡體   English   中英

Jaxb2Marshaller在春季解組-意外元素

[英]Jaxb2Marshaller unmarshalling in spring - unexpected element

對於使用Jaxb進行解組,我還很陌生,但是我認為我已經正確配置了所有內容,但在運行時卻遇到了此錯誤:

 javax.xml.bind.UnmarshalException: unexpected element (uri:"http://xml.product.place.com/prod/alerts/v_1_0", local:"Record"). Expected elements are (none)

我正在使用由JaxB基於幾個XSD生成的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.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>

如果有人對為什么packagesToScan無法按我的預期工作有任何見解,我很想聽聽。

為了使用“ packagesToScan”,我相信package-info.java類應該出現在您從Schema(XSD)生成類的Java包中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM