JAXB Problem mit (zu großem?) Array

JensArpe

Mitglied
Hey,

habe folgendes Problemchen in meinem Programm:


Einstellungen.java
Java:
import java.awt.Color;
import java.io.File;
import javax.swing.JOptionPane;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Einstellungen {

    private static Einstellungen myinstance = null;

    /*
     * LEDs
     */
    private String beschriftungZeile1 = "it";
    private String beschriftungZeile2 = "ert";
    private String beschriftungZeile3 = "ert";
    private String beschriftungZeile4 = "ert";
    private String beschriftungZeile5 = "ert";

    private int [] parameterLED   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
        
    private Einstellungen() {
    }

    
    public String getBeschriftungZeile1() {
        return beschriftungZeile1;
    }

    public void setBeschriftungZeile1(String beschriftungZeile1) {
        this.beschriftungZeile1 = beschriftungZeile1;
    }

    public String getBeschriftungZeile2() {
        return beschriftungZeile2;
    }

    public void setBeschriftungZeile2(String beschriftungZeile2) {
        this.beschriftungZeile2 = beschriftungZeile2;
    }

    public String getBeschriftungZeile3() {
        return beschriftungZeile3;
    }

    public void setBeschriftungZeile3(String beschriftungZeile3) {
        this.beschriftungZeile3 = beschriftungZeile3;
    }

    public String getBeschriftungZeile4() {
        return beschriftungZeile4;
    }

    public void setBeschriftungZeile4(String beschriftungZeile4) {
        this.beschriftungZeile4 = beschriftungZeile4;
    }

    public String getBeschriftungZeile5() {
        return beschriftungZeile5;
    }

    public void setBeschriftungZeile5(String beschriftungZeile5) {
        this.beschriftungZeile5 = beschriftungZeile5;
    }

    public int getLedParam11() {
        return parameterLED[1];
    }

    public void setLedParam11(int ledParam11) {
        this.parameterLED[1] = ledParam11;
    }

    public int getLedParam12() {
        return parameterLED[2];
    }

    public void setLedParam12(int ledParam12) {
        this.parameterLED[2] = ledParam12;
    }

    public int getLedParam13() {
        return parameterLED[3];
    }

    public void setLedParam13(int ledParam13) {
        this.parameterLED[3] = ledParam13;
    }

    public int getLedParam14() {
        return parameterLED[4];
    }

    public void setLedParam14(int ledParam14) {
        this.parameterLED[4] = ledParam14;
    }

    public int getLedParam15() {
        return parameterLED[5];
    }

    public void setLedParam15(int ledParam15) {
        this.parameterLED[5] = ledParam15;
    }

    public int getLedParam21() {
        return parameterLED[6];
    }

    public void setLedParam21(int ledParam21) {
        this.parameterLED[6] = ledParam21;
    }

    public int getLedParam22() {
        return parameterLED[7];
    }

    public void setLedParam22(int ledParam22) {
        this.parameterLED[7] = ledParam22;
    }

    public int getLedParam23() {
        return parameterLED[8];
    }

    public void setLedParam23(int ledParam23) {
        this.parameterLED[8] = ledParam23;
    }

    public int getLedParam24() {
        return parameterLED[9];
    }

    public void setLedParam24(int ledParam24) {
        this.parameterLED[9] = ledParam24;
    }

    public int getLedParam25() {
        return parameterLED[10];
    }

    public void setLedParam25(int ledParam25) {
        this.parameterLED[10] = ledParam25;
    }

    public int getLedParam31() {
        return parameterLED[11];
    }

    public void setLedParam31(int ledParam31) {
        this.parameterLED[11] = ledParam31;
    }

    public int getLedParam32() {
        return parameterLED[12];
    }

    public void setLedParam32(int ledParam32) {
        this.parameterLED[12] = ledParam32;
    }

    public int getLedParam33() {
        return parameterLED[13];
    }

    public void setLedParam33(int ledParam33) {
        this.parameterLED[13] = ledParam33;
    }

    public int getLedParam34() {
        return parameterLED[14];
    }

    public void setLedParam34(int ledParam34) {
        this.parameterLED[14] = ledParam34;
    }

    public int getLedParam35() {
        return parameterLED[15];
    }

    public void setLedParam35(int ledParam35) {
        this.parameterLED[15] = ledParam35;
    }

    public int getLedParam41() {
        return parameterLED[16];
    }

    public void setLedParam41(int ledParam41) {
        this.parameterLED[16] = ledParam41;
    }

    public int getLedParam42() {
        return parameterLED[17];
    }

    public void setLedParam42(int ledParam42) {
        this.parameterLED[17] = ledParam42;
    }

    public int getLedParam43() {
        return parameterLED[18];
    }

    public void setLedParam43(int ledParam43) {
        this.parameterLED[18] = ledParam43;
    }

    public int getLedParam44() {
        return parameterLED[19];
    }

    public void setLedParam44(int ledParam44) {
        this.parameterLED[19] = ledParam44;
    }

    public int getLedParam45() {
        return parameterLED[20];
    }

    public void setLedParam45(int ledParam45) {
        this.parameterLED[20] = ledParam45;
    }

    public int getLedParam51() {
        return parameterLED[21];
    }

    public void setLedParam51(int ledParam51) {
        this.parameterLED[21] = ledParam51;
    }

    public int getLedParam52() {
        return parameterLED[22];
    }

    public void setLedParam52(int ledParam52) {
        this.parameterLED[22] = ledParam52;
    }

    public int getLedParam53() {
        return parameterLED[23];
    }

    public void setLedParam53(int ledParam53) {
        this.parameterLED[23] = ledParam53;
    }

    public int getLedParam54() {
        return parameterLED[24];
    }

    public void setLedParam54(int ledParam54) {
        this.parameterLED[24] = ledParam54;
    }

    public int getLedParam55() {
        return parameterLED[25];
    }

    public void setLedParam55(int ledParam55) {
        this.parameterLED[25] = ledParam55;
    }

    public int getParamterI(int i){
        return parameterLED[i];
    }

  
    public void schreibeEinstellungsDatei() {
        try {
            JAXBContext context = JAXBContext.newInstance(Einstellungen.class);
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
            marshaller.marshal(this, new File("Einstellungen.xml"));
        } catch (Exception e) {
           
        }
    }


    public static void leseEinstellungsDatei() {
        try {
            JAXBContext context = JAXBContext.newInstance(Einstellungen.class);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            myinstance = (Einstellungen) unmarshaller.unmarshal(new File("Einstellungen.xml"));
        } catch (Exception e) {
           
        }
    }

    public synchronized static Einstellungen getInstance() {
        if (myinstance == null) {
            myinstance = new Einstellungen();
            leseEinstellungsDatei();
        }
        return myinstance;
    }
}

Java:
public class teststring {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
try{
//        Einstellungen.getInstance().leseEinstellungsDatei();
        Einstellungen.getInstance().schreibeEinstellungsDatei();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

Wenn ich das Programm jetzt starte, dann kommt keine Fehlermeldung, aber die XML-Datei sieht nachher so aus:
(Wenn man runter scrollt sieht man, daß die XML-Datei nicht fertig geschrieben wurde)

[XML]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<einstellungen>
<beschriftungZeile1>it</beschriftungZeile1>
<beschriftungZeile2>ert</beschriftungZeile2>
<beschriftungZeile3>ert</beschriftungZeile3>
<beschriftungZeile4>ert</beschriftungZeile4>
<beschriftungZeile5>ert</beschriftungZeile5>
<ledParam11>0</ledParam11>
<ledParam12>0</ledParam12>
<ledParam13>0</ledParam13>
<ledParam14>0</ledParam14>
<ledParam15>0</ledParam15>
<ledParam21>0</ledParam21>
<ledParam22>0</ledParam22>
<ledParam23>0</ledParam23>
<ledParam24>0</ledParam24>
<ledParam25>0</ledParam25>
<ledParam31>0</ledParam31>
<ledParam32>0</ledParam32>
<ledParam33>0</ledParam33>
<ledParam34>0</ledParam34>
<ledParam35>0</ledParam35>
<ledParam41>0</ledParam41>
<ledParam42>0</ledParam42>
<ledParam43>0</ledParam43>
<ledParam44>0</ledParam44>
<ledParam45>0</ledParam45>
<ledParam51>0</ledParam51>
<ledParam52>0</ledParam52>
<ledParam53>0</ledParam53
[/XML]


Wenn ich jetzt aber die Einstellungen.java kürze und 5 von den Setter- und Getter-Methoden weglasse, dann gehts problemslos.

Java:
import java.awt.Color;
import java.io.File;
import javax.swing.JOptionPane;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Einstellungen {

    private static Einstellungen myinstance = null;

    /*
     * LEDs
     */
    private String beschriftungZeile1 = "it";
    private String beschriftungZeile2 = "ert";
    private String beschriftungZeile3 = "ert";
    private String beschriftungZeile4 = "ert";
    private String beschriftungZeile5 = "ert";

    private int [] parameterLED   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
        
    private Einstellungen() {
    }

    
    public String getBeschriftungZeile1() {
        return beschriftungZeile1;
    }

    public void setBeschriftungZeile1(String beschriftungZeile1) {
        this.beschriftungZeile1 = beschriftungZeile1;
    }

    public String getBeschriftungZeile2() {
        return beschriftungZeile2;
    }

    public void setBeschriftungZeile2(String beschriftungZeile2) {
        this.beschriftungZeile2 = beschriftungZeile2;
    }

    public String getBeschriftungZeile3() {
        return beschriftungZeile3;
    }

    public void setBeschriftungZeile3(String beschriftungZeile3) {
        this.beschriftungZeile3 = beschriftungZeile3;
    }

    public String getBeschriftungZeile4() {
        return beschriftungZeile4;
    }

    public void setBeschriftungZeile4(String beschriftungZeile4) {
        this.beschriftungZeile4 = beschriftungZeile4;
    }

    public String getBeschriftungZeile5() {
        return beschriftungZeile5;
    }

    public void setBeschriftungZeile5(String beschriftungZeile5) {
        this.beschriftungZeile5 = beschriftungZeile5;
    }

    public int getLedParam11() {
        return parameterLED[1];
    }

    public void setLedParam11(int ledParam11) {
        this.parameterLED[1] = ledParam11;
    }

    public int getLedParam12() {
        return parameterLED[2];
    }

    public void setLedParam12(int ledParam12) {
        this.parameterLED[2] = ledParam12;
    }

    public int getLedParam13() {
        return parameterLED[3];
    }

    public void setLedParam13(int ledParam13) {
        this.parameterLED[3] = ledParam13;
    }

    public int getLedParam14() {
        return parameterLED[4];
    }

    public void setLedParam14(int ledParam14) {
        this.parameterLED[4] = ledParam14;
    }

    public int getLedParam15() {
        return parameterLED[5];
    }

    public void setLedParam15(int ledParam15) {
        this.parameterLED[5] = ledParam15;
    }

    public int getLedParam21() {
        return parameterLED[6];
    }

    public void setLedParam21(int ledParam21) {
        this.parameterLED[6] = ledParam21;
    }

    public int getLedParam22() {
        return parameterLED[7];
    }

    public void setLedParam22(int ledParam22) {
        this.parameterLED[7] = ledParam22;
    }

    public int getLedParam23() {
        return parameterLED[8];
    }

    public void setLedParam23(int ledParam23) {
        this.parameterLED[8] = ledParam23;
    }

    public int getLedParam24() {
        return parameterLED[9];
    }

    public void setLedParam24(int ledParam24) {
        this.parameterLED[9] = ledParam24;
    }

    public int getLedParam25() {
        return parameterLED[10];
    }

    public void setLedParam25(int ledParam25) {
        this.parameterLED[10] = ledParam25;
    }

    public int getLedParam31() {
        return parameterLED[11];
    }

    public void setLedParam31(int ledParam31) {
        this.parameterLED[11] = ledParam31;
    }

    public int getLedParam32() {
        return parameterLED[12];
    }

    public void setLedParam32(int ledParam32) {
        this.parameterLED[12] = ledParam32;
    }

    public int getLedParam33() {
        return parameterLED[13];
    }

    public void setLedParam33(int ledParam33) {
        this.parameterLED[13] = ledParam33;
    }

    public int getLedParam34() {
        return parameterLED[14];
    }

    public void setLedParam34(int ledParam34) {
        this.parameterLED[14] = ledParam34;
    }

    public int getLedParam35() {
        return parameterLED[15];
    }

    public void setLedParam35(int ledParam35) {
        this.parameterLED[15] = ledParam35;
    }

    public int getLedParam41() {
        return parameterLED[16];
    }

    public void setLedParam41(int ledParam41) {
        this.parameterLED[16] = ledParam41;
    }

    public int getLedParam42() {
        return parameterLED[17];
    }

    public void setLedParam42(int ledParam42) {
        this.parameterLED[17] = ledParam42;
    }

    public int getLedParam43() {
        return parameterLED[18];
    }

    public void setLedParam43(int ledParam43) {
        this.parameterLED[18] = ledParam43;
    }

    public int getLedParam44() {
        return parameterLED[19];
    }

    public void setLedParam44(int ledParam44) {
        this.parameterLED[19] = ledParam44;
    }

    public int getLedParam45() {
        return parameterLED[20];
    }

    public void setLedParam45(int ledParam45) {
        this.parameterLED[20] = ledParam45;
    }
  
    public void schreibeEinstellungsDatei() {
        try {
            JAXBContext context = JAXBContext.newInstance(Einstellungen.class);
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
            marshaller.marshal(this, new File("Einstellungen.xml"));
        } catch (Exception e) {
           
        }
    }


    public static void leseEinstellungsDatei() {
        try {
            JAXBContext context = JAXBContext.newInstance(Einstellungen.class);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            myinstance = (Einstellungen) unmarshaller.unmarshal(new File("Einstellungen.xml"));
        } catch (Exception e) {
           
        }
    }

    public synchronized static Einstellungen getInstance() {
        if (myinstance == null) {
            myinstance = new Einstellungen();
            leseEinstellungsDatei();
        }
        return myinstance;
    }
}

[XML]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<einstellungen>
<beschriftungZeile1>it</beschriftungZeile1>
<beschriftungZeile2>ert</beschriftungZeile2>
<beschriftungZeile3>ert</beschriftungZeile3>
<beschriftungZeile4>ert</beschriftungZeile4>
<beschriftungZeile5>ert</beschriftungZeile5>
<ledParam11>0</ledParam11>
<ledParam12>0</ledParam12>
<ledParam13>0</ledParam13>
<ledParam14>0</ledParam14>
<ledParam15>0</ledParam15>
<ledParam21>0</ledParam21>
<ledParam22>0</ledParam22>
<ledParam23>0</ledParam23>
<ledParam24>0</ledParam24>
<ledParam25>0</ledParam25>
<ledParam31>0</ledParam31>
<ledParam32>0</ledParam32>
<ledParam33>0</ledParam33>
<ledParam34>0</ledParam34>
<ledParam35>0</ledParam35>
<ledParam41>0</ledParam41>
<ledParam42>0</ledParam42>
<ledParam43>0</ledParam43>
<ledParam44>0</ledParam44>
<ledParam45>0</ledParam45>
</einstellungen>
[/XML]

Da nichtmal ne Exception kommt, weiß ich garnicht wo ich suchen soll :/

kann mit bitte einer helfen?

Danle im Vorraus
 
Hi,

du klaust dir deine eigene (wahrscheinlich schon auftretende) Exception hier:
Java:
public void schreibeEinstellungsDatei() {
        try {
            JAXBContext context = JAXBContext.newInstance(Einstellungen.class);
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
            marshaller.marshal(this, new File("Einstellungen.xml"));
        } catch (Exception e) {
           // Hier fehlt das Exception Handling
        }
    }

Wenn du es (wie scheinbar gewünscht) in der aufrufenden Klasse behandeln willst müsste es so aussehen:
Java:
public void schreibeEinstellungsDatei() throws Exception {
            JAXBContext context = JAXBContext.newInstance(Einstellungen.class);
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
            marshaller.marshal(this, new File("Einstellungen.xml"));
    }

Grüße
Erik
 
Einfach mal eine Frage: (allerdings ist mir der Zusammenhang in dem Deine SW läuft nicht ganz klar)
Ist es wirklich nötig zig Prozeduren wie

Java:
getBeschriftungZeile1()

oder geht das auch als

Java:
getBeschriftungZeile(int nr)
 
Hey,

danke für die Antworten. Also

Hi,
du klaust dir deine eigene (wahrscheinlich schon auftretende) Exception hier:
Grüße
Erik

In meinem eigentlichen Programm kommt da dann ne MessageBox.. und dumm wie ich bin, hab ich mir da dann leider nie den Fehler ausgeben lassen. 🙁

Einfach mal eine Frage: (allerdings ist mir der Zusammenhang in dem Deine SW läuft nicht ganz klar)
Ist es wirklich nötig zig Prozeduren wie

Java:
getBeschriftungZeile1()

oder geht das auch als

Java:
getBeschriftungZeile(int nr)

Die ganzen Prozeduren hatte ich erst gemacht, dann alles nochmal umgebaut ,weils zu viel wurde. Wenn du ganz runterscrollst, dann gibts da schon eine Methode. Aber trotzdem danke.

Java:
public int getParamterI(int i){
        return parameterLED[i];
    }


So für alle die es interessiert. Ich hab mir dann endlich mal die Exception ausgeben lassen.. :lol: und der Fehler ist eine einfache Array out of Bound Exception. Ich versuche da von 1-25 im Array zuzugreifen anstelle von 0-24.

Außerdem ist es sehr von Vorteil noch ein

Java:
@XmlElement
vor das Array zu packen.

Danke für eure Antworten
 

Neue Themen


Zurück
Oben