Я сейчас пытаюсь сохранить ObservableList и двойную переменную в виде XML-документа.Каким-то образом сохранение не отсортировано (переменные не отсортированы, как они были объявлены), а загрузка вообще не работает.
Прежде всего мой ObservableList содержит 6 объектов "Неделя".
Недельный класс:
public class Week {
double Montag;
double Dienstag;
double Mittwoch;
double Donnerstag;
double Freitag;
double Samstag;
double Sonntag;
public Week(double montag, double dienstag, double mittwoch, double donnerstag, double freitag, double samstag,
double sonntag) {
Montag = montag;
Dienstag = dienstag;
Mittwoch = mittwoch;
Donnerstag = donnerstag;
Freitag = freitag;
Samstag = samstag;
Sonntag = sonntag;
}
public double getMontag() {
return Montag;
}
public void setMontag(double montag) {
Montag = montag;
}
public double getDienstag() {
return Dienstag;
}
public void setDienstag(double dienstag) {
Dienstag = dienstag;
}
public double getMittwoch() {
return Mittwoch;
}
public void setMittwoch(double mittwoch) {
Mittwoch = mittwoch;
}
public double getDonnerstag() {
return Donnerstag;
}
public void setDonnerstag(double donnerstag) {
Donnerstag = donnerstag;
}
public double getFreitag() {
return Freitag;
}
public void setFreitag(double freitag) {
Freitag = freitag;
}
public double getSamstag() {
return Samstag;
}
public void setSamstag(double samstag) {
Samstag = samstag;
}
public double getSonntag() {
return Sonntag;
}
public void setSonntag(double sonntag) {
Sonntag = sonntag;
}
}
Я создал статический метод, который будет возвращать строку XML.Вызов метода будет выглядеть следующим образом.
String xmlTest = XmlUtils.saveListAsXML(fxTable.getItems(),Double.parseDouble(fxWeek.getText()));
fxTable.getItems () вернет ObservableList с 6 объектами "Week", а другой параметр - просто двойной.
Я думал о создании другого класса«Недели», которые будут содержать двойную переменную и список типа «неделя», а затем просто сериализуют класс Weeks.Как-то это не работает, как я думал?
public static String saveListAsXML(ObservableList<Week> list, double Kalenderwoche) {
Weeks xmlObj = new Weeks();
xmlObj.setKalender(Kalenderwoche);
for (Week w : list) {
xmlObj.addToList(w);
}
StringWriter sw = new StringWriter();
JAXB.marshal(xmlObj, sw);
String xmlString = sw.toString();
return xmlString;
}
Недели Класс:
package Model;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Weeks {
@XmlElement
private double Kalenderwoche;
@XmlElement
ArrayList<Week> woche= new ArrayList<>();
public void addToList(Week week) {
woche.add(week);
System.out.println(week.Dienstag);
}
public void setKalender(double wert) {
Kalenderwoche = wert;
}
}
Результат экспорта выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<weeks>
<Kalenderwoche>12.0</Kalenderwoche>
<woche>
<dienstag>0.0</dienstag>
<donnerstag>0.0</donnerstag>
<freitag>0.0</freitag>
<mittwoch>0.0</mittwoch>
<montag>50.0</montag>
<samstag>0.0</samstag>
<sonntag>0.0</sonntag>
</woche>
<woche>
<dienstag>0.0</dienstag>
<donnerstag>0.0</donnerstag>
<freitag>0.0</freitag>
<mittwoch>0.0</mittwoch>
<montag>0.0</montag>
<samstag>0.0</samstag>
<sonntag>0.0</sonntag>
</woche>
<woche>
<dienstag>0.0</dienstag>
<donnerstag>0.0</donnerstag>
<freitag>0.0</freitag>
<mittwoch>0.0</mittwoch>
<montag>0.0</montag>
<samstag>0.0</samstag>
<sonntag>0.0</sonntag>
</woche>
<woche>
<dienstag>0.0</dienstag>
<donnerstag>0.0</donnerstag>
<freitag>0.0</freitag>
<mittwoch>0.0</mittwoch>
<montag>0.0</montag>
<samstag>0.0</samstag>
<sonntag>0.0</sonntag>
</woche>
<woche>
<dienstag>0.0</dienstag>
<donnerstag>0.0</donnerstag>
<freitag>0.0</freitag>
<mittwoch>0.0</mittwoch>
<montag>0.0</montag>
<samstag>0.0</samstag>
<sonntag>0.0</sonntag>
</woche>
<woche>
<dienstag>0.0</dienstag>
<donnerstag>0.0</donnerstag>
<freitag>0.0</freitag>
<mittwoch>0.0</mittwoch>
<montag>0.0</montag>
<samstag>0.0</samstag>
<sonntag>0.0</sonntag>
</woche>
(Обратите внимание, что структура на самом деле в порядке, а значения 0,0 правильныев этом случае также хорошо. Единственное, что меня беспокоит, так это то, что раздел "woche" сортируется так: dienstag,donnerstag,freitag,mittwoch,montag,samstag,sonntag
, а не сортируется, как в объекте недели montag,dienstag,mittwoch,donnerstag,freitag,samstag,sonntag
Я также создал статический методкоторый должен загрузить XML-файл и создать из него объект Weeks.
Метод выглядит следующим образом:
public static ObservableList<Week> getXmlAsList(File file) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Weeks.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Weeks customer = (Weeks) jaxbUnmarshaller.unmarshal(file);
} catch (JAXBException e) {
e.printStackTrace();
}
ObservableList<Week> list = FXCollections.observableArrayList();
return list;
}
Метод atm просто создает объект Weeks и возвращает пустой список, но создаетОбъект Weeks вообще не работает.
Jun 25, 2018 2:21:39 PM com.sun.xml.internal.bind.v2.ClassFactory create0
INFORMATION: No default constructor found on class Model.Week
java.lang.NoSuchMethodException: Model.Week.<init>()
Я немного озадачен связыванием XML, может кто-нибудь дать мне подсказку или сказать, что я делаю неправильно?
Заранее спасибо.