1

jaxbアンマーシャリングはオブジェクトの重複リストを作成します:リスト内のオブジェクトをアンマーシャリングする方法は?

要素をアンマーシャリングして重複リストを取得している間、xml ファイルとコードを以下に示します。私は jaxb 注釈を使用しており、最終的な出力は重複リストです。

<data_reading>

    <load_survey>
        <interval_settings value="30" xunit="mins" />
        <measurement name="energy_real" xunit="KWH" />
        <reading interval="00" value="000.010" />
        <reading interval="01" value="000.000" />
        <reading interval="02" value="000.050" />
        <reading interval="03" value="000.080" />
        <reading interval="04" value="000.010" />

    </load_survey>
</data_reading>


These are my classes
@XmlAccessorType(XmlAccessType.FIELD)
public class LoadSurvey {

    @XmlElement(name="interval_settings")
    private IntervalSettings interval_settings;
    @XmlElement(name="measurement")
    private Measurement measurement;
    @XmlElement(name="reading", type = Reading.class)
    private List<Reading> readings;
//setter and getters
}


@XmlRootElement(name="data_reading")
@XmlAccessorType(XmlAccessType.FIELD)
public class DataReading {


    @XmlElement(name="load_survey")
    private LoadSurvey load_survey;

}

This is my code Here i am getting following output

[data_reading [load_survey=LoadSurvey [interval_settings=IntervalSettings [value=30, xunit=mins], measurement=Measurement [name=energy_real, xunit=KWH], readings=[Reading [interval=00, value=0.23], Reading [interval=01, value=0.23], Reading [interval=02, value=0.22], Reading [interval=03, value=0.21], Reading [interval=04, value=0.23], Reading [interval=05, value=0.24], Reading [interval=00, value=0.23], Reading [interval=01, value=0.23], Reading [interval=02, value=0.22], Reading [interval=03, value=0.21], Reading [interval=04, value=0.23], Reading [interval=05, value=0.24]]]]

Getting Readings list duplicates with jaxb please provide any solution
4

1 に答える 1

1

リスト内のアイテムが重複する唯一の方法は、フィールド (インスタンス) 変数と対応するプロパティ (get/set メソッド) の両方をマップした場合です。指定したので、リスト プロパティXmlAccessType.FIELDのメソッドに注釈を付けていないことを確認してください。get

詳細については


あなたの例は私にとってはうまくいきました。私がしたことを以下に含めました:

ジャバモデル

以下は、問題が発生した部分に焦点を当てた部分モデルです。

データ読み取り

import javax.xml.bind.annotation.*;

@XmlRootElement(name="data_reading")
@XmlAccessorType(XmlAccessType.FIELD)
public class DataReading {

    @XmlElement(name="load_survey")
    private LoadSurvey load_survey;

}

LoadSurvey

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
public class LoadSurvey {

    @XmlElement(name="reading")
    private List<Reading> readings;

}

読む

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
public class Reading {

    @XmlAttribute
    private String interval;

    @XmlAttribute
    private String value;

}

デモコード

デモ

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(DataReading.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum15833602/input.xml");
        DataReading dataReading = (DataReading) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(dataReading, System.out);
    }

}

input.xml/出力

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data_reading>
    <load_survey>
        <reading interval="00" value="000.010"/>
        <reading interval="01" value="000.000"/>
        <reading interval="02" value="000.050"/>
        <reading interval="03" value="000.080"/>
        <reading interval="04" value="000.010"/>
    </load_survey>
</data_reading>
于 2013-04-05T11:02:55.913 に答える