MalformedByteSequenceException und null JDOM Attribute

Helgon

Bekanntes Mitglied
Hey. Ich hab folgendes Problem.

Damits verständlich und übersichtlich bleibt, mach ich alles mal in Pseudo Code

Java:
Klasse1{

Enter gedrückt -> schreibXML();

}

Java:
schreibXML{

schreibXML(){
 checkObDateiVorhanden()
}

schreibXML(File file){
 schreiben();
}

checkObDateiVorhanden(){
if(vorhanden)
   schreiben();
else
   erstelleXML();
}

schreiben(){

 setzt paar neue elemente

}

erstelleXML(){

  blalbla erstellt datei
  schreibXML(file); //ruft überladenen konstruktor mit der erstellten datei auf;


}

}

Also folgendes Problem.

Wenn ich 1x meinen Button im GUI drücke, erstellt er die xml datei (seh ich im ordner), aber ich bekomm ein

Java:
Exception in thread "AWT-EventQueue-0" org.jdom.IllegalDataException: The data "null" is not legal for a JDOM attribute: A null is not a legal XML value.

Wenn ich dann einfach noch einmal drücke, kommt kein Error und es läuft alles wie es soll.

Wenn ich dann aber ein 3tes mal drücke bekomme ich ein

Java:
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Ungültiges Byte 2 von 2-Byte-UTF-8-Sequenz.

Das hab ich gegoogelt und herausgefunden, dass es wohl daran liegt, dass die xml nicht richtig utf-8 sei.
Die XML Datei erstelle ich über einen FileWriter so das <?xml version="1.0" encoding=\"UTF-8\"?> drin steht.
Dann hab ichs mal mit weglassen des encodings probiert
und mein 3ter Versuch war die XML Datei über den wc3 dom parser zu erzeugen.
Jedes mal das Gleiche :(

Hat wer ne Idee?

Grüße

EDIT mal der ganze Code, vllt hilft es

Java:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;


public class DatabaseWriter {

	HashMap<String, String> artikelInfos = new HashMap<String, String>();
	
	public DatabaseWriter(HashMap<String, String> artikelInfos){

		this.artikelInfos = artikelInfos;
		File file = new File("db.xml");
		checkForExist(file);

	}
	
	public DatabaseWriter(File file){
		writeIntoDB(file);
	}
	
	private void checkForExist(File file){
		if(!file.exists()){
			createNewDB(file);
		}else{
			writeIntoDB(file);
		}
	}
	
	private void writeIntoDB(File file){
		
		try {
						
			System.out.println("0");
			
			Document doc = new SAXBuilder().build(file.toString());
			System.out.println("01");
			Element db = doc.getRootElement();
			
			System.out.println("1");
			
			//int actualSize = Integer.valueOf(db.getChild("size").getAttributeValue("value")) + 1; // holt sich aktuelle anzahl der artikel und erhöht + 1
			//db.getChild("size").setAttribute("value",String.valueOf(actualSize)); // erhöt die anzahl der artikel
			
			System.out.println("2");

			
			Element artikel = new Element("artikel").setAttribute(new Attribute("id","af")); 
			db.addContent(artikel);
			
			System.out.println("3");

	
			artikel.addContent(new Element("titel").setAttribute(new Attribute("value",artikelInfos.get("titel"))));
			artikel.addContent(new Element("autor").setAttribute(new Attribute("value",artikelInfos.get("autor"))));
			artikel.addContent(new Element("format").setAttribute(new Attribute("value",artikelInfos.get("format"))));
			artikel.addContent(new Element("preis").setAttribute(new Attribute("value",artikelInfos.get("preis"))));;
			artikel.addContent(new Element("date").setAttribute(new Attribute("value",artikelInfos.get("date"))));
			
			System.out.println("4");

			
			// ---------------------------------------------------------
			XMLOutputter xmlOutput = new XMLOutputter();
			xmlOutput.setFormat(Format.getPrettyFormat());
			xmlOutput.output(doc, new FileWriter("db.xml"));
			

			
		} catch (JDOMException | IOException e) {
			e.printStackTrace();
		}
		
	}
	
	private void createNewDB(File file){
		
		try {
			file.createNewFile();
			iniDB(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	private void iniDB(File file){
		
		File temp = file;
		
		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));
			bw.write("<?xml version=\"1.0\" encoding="UTF-8"?>\n");
			bw.write("<datenbank>\n<size value=\"0\" /></datenbank>");
			bw.close();
			new DatabaseWriter(temp);
		} catch (IOException e) {
			e.printStackTrace();
		}	
	}
	
}
/* HashMap zum testen
		artikelInfos.put("titel", "1");
		artikelInfos.put("autor", "2");
		artikelInfos.put("format", "3");
		artikelInfos.put("preis", "4");
		artikelInfos.put("date", "5");
*/

EDIT 2: Ich dreh echt am Zeiger, habs jetzt mal mit nem anderen Stream und uft-8 probiert, genau das gleiche Problem

Java:
private void iniDB(File file){
		
		File temp = file;
		
		try {
			Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
			out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?><datenbank><size value=\"0\" /></datenbank>");
			out.close();
			new DatabaseWriter(temp);
		} catch (IOException e) {
			e.printStackTrace();
		}	
	}
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Es wäre ja mal interessant wie das [c]artikelInfos[/c] aussieht welches du der Klasse übergibst.
Anscheinend liefert eines oder mehrerer deiner artikelInfos.get(...) ein
Code:
null
?! Bzw. generell wäre der Inhalt mal interessant
 

Helgon

Bekanntes Mitglied
Daran liegts nicht, weil ich testweise die HashMap artikelInfos auch ausgeben lassen hab.
Hatte die gleiche Vermutung

Java:
	private void buttonSaveActionPerformed(java.awt.event.ActionEvent evt){
		fillInfoHashMap();
		new DatabaseWriter(artikelInfos);		
	}

Java:
	public void fillInfoHashMap(){
		
		Date d = new Date(); 
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
        String date = String.valueOf(sdf.format(d));
		
		artikelInfos.put("titel", titelTextArea.getText());
		artikelInfos.put("autor", autorInput.getText());
		artikelInfos.put("format", formatInput.getText());
		artikelInfos.put("preis", preisInput.getText());
		artikelInfos.put("date", date);
		
	}

Wie gesagt, klar könnte einer der getText() Werte null sein, sind sie aber nicht(nie!), das hab ich selbst überpüft.

Beispiel der Inhalte könnte sein:

Java:
titelTextArea.getText(); // Budenbrooks: Roman
autorInput.getText(); // Thomas Mann 
preisInput.getText(); // 11,95€

Dachte vllt, das es am € Zeichen oder so liegt, aber beim 2ten mal drücken gehts ja :), also das ist nicht ausschlaggebend.

Edit: Zu erwähnen sei, dass beim 1ten mal drücken alles bis zur Ausgabe "3" läuft, also bis Zeiele 64, deswegen wär das natürlich naheliegend, aber warum sollte es dann beim 2ten mal drücken erst gehen.
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Naja, so kommen wir nicht weiter. Die Exceptions von oben zeigen doch genau auf eine Zeile oder? Auf welche? Wie lautet die gesamte Exceptionmeldung?
 

Helgon

Bekanntes Mitglied
KonsolenAusgabe, 1x drücken
Java:
0
01
1
2
3
Exception in thread "AWT-EventQueue-0" org.jdom.IllegalDataException: The data "null" is not legal for a JDOM attribute: A null is not a legal XML value.
	at org.jdom.Attribute.setValue(Attribute.java:491)
	at org.jdom.Attribute.<init>(Attribute.java:228)
	at org.jdom.Attribute.<init>(Attribute.java:251)
	at DatabaseWriter.writeIntoDB(DatabaseWriter.java:67)
	at DatabaseWriter.<init>(DatabaseWriter.java:32)
	at DatabaseWriter.iniDB(DatabaseWriter.java:108)
	at DatabaseWriter.createNewDB(DatabaseWriter.java:93)
	at DatabaseWriter.checkForExist(DatabaseWriter.java:37)
	at DatabaseWriter.<init>(DatabaseWriter.java:27)
	at MainFrame.buttonSaveActionPerformed(MainFrame.java:334)
	at MainFrame.access$7(MainFrame.java:332)
	at MainFrame$8.actionPerformed(MainFrame.java:194)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
So XML Datei wurde erstellt, der header und so geschrieben, aber dann wenns dazu übergeht die ArtikelInfos zu schreiben eben der Error

Zweite mal gedrückt, alles läuft fehlerfrei durch
Java:
0
01
1
2
3
4

3tes mal drücken und folgende Male. Von der Theorie müsste der jetzt einfach mehrere indentische Artikel in die XML datei schreiben, aber es kommt auch:
Java:
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Ungültiges Byte 2 von 2-Byte-UTF-8-Sequenz.
	at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanLiteral(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanAttribute(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:518)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:986)
	at DatabaseWriter.writeIntoDB(DatabaseWriter.java:49)
	at DatabaseWriter.checkForExist(DatabaseWriter.java:39)
	at DatabaseWriter.<init>(DatabaseWriter.java:27)
	at MainFrame.buttonSaveActionPerformed(MainFrame.java:334)
	at MainFrame.access$7(MainFrame.java:332)
	at MainFrame$8.actionPerformed(MainFrame.java:194)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
 

eRaaaa

Top Contributor
Mhm, zu viele Unbekannte irgendwie. Hast du mal richtig gedebuggt? Oder zumindest mal ein System.out(artikelInfos.get("preis")) gemacht VOR Zeile 64 ?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N MalformedByteSequenceException bei Lesen aus XML Datei XML & JSON 2
Avalon DTO ist null XML & JSON 17
N LocalName = null XML & JSON 2
G XMLDecoder - target should not be null XML & JSON 3
K Document null bei builder.parse XML & JSON 2
sparrow JDom Element.getChild("Name") liefert null obwohl vorhanden XML & JSON 4
B JDom -- getChild() liefert nicht nachvollziehbar null XML & JSON 2
P JDOM oder SAX XML & JSON 3
Hijo2006 Grundsätzliches zu JDOM 2.x XML & JSON 1
W Kindelemente mit JDOM eines bestimmten Attributes auslesen XML & JSON 6
S JDOM XML Datei darstellen Fehler! XML & JSON 2
S JDom XML ein Element hinzufügen. XML & JSON 1
C JDOM: Value ohne Unterelemente auslesen XML & JSON 1
Z XML Datei mit JDOM einlesen und verarbeiten XML & JSON 6
J JDOM XMLOutputter getPrettyFormat() XML & JSON 3
H JDOM setAttribute Reihenfolge XML & JSON 3
B XML aus einer URL im Internet lesen (JDOM) XML & JSON 4
F Aus XML mit JDOM aus Elementattributen Werte rauslesen XML & JSON 4
R sax, stax, jdom, jaxb? List von Objekten speichern und laden XML & JSON 6
C xml validierung gegen xsd mit jdom: Fehlermeldung Cannot find the declaration of element ... XML & JSON 8
T Dom, Jdom, Sax XML & JSON 8
Helgon JDOM schreibt nicht XML & JSON 2
A XSl mit JDom auslesen XML & JSON 1
G xml, jdom "Entität wurde referenziert aber nicht deklariert." XML & JSON 4
A XSL und JDom XML & JSON 3
G jdom-Klassen in Eclipse importieren XML & JSON 2
S JDOM ohne XML Header erzeugen? XML & JSON 2
G JDOM - aus Children-Liste ein Child direkt ansprechen ohne XPath? XML & JSON 9
S JDOM nur Attribut Name XML & JSON 2
X JDom für SOAP Dateien geeignet? XML & JSON 3
T Xpath & JDOM Element Pfad ausgeben XML & JSON 2
M XML Parsen JDOM NullPointerEcxeption XML & JSON 7
S jdom hasChildren()? XML & JSON 1
T Frage zu getContent unter jdom XML & JSON 6
Z Tutorial für JDOM (XSD-Shema) XML & JSON 3
D jdom, xml, login-system XML & JSON 4
N JDOM: XML einlesen XML & JSON 4
O Parsen einer XML mit JDOM ohne Doctype Declaration XML & JSON 2
lordcarlos jdom zu iso-8859-15 zwingen XML & JSON 4
P jdom XML-Encoding auslesen XML & JSON 12
E JDOM - letzem child Attribut hinzufügen XML & JSON 4
H Schema-Validierung mit JDOM XML & JSON 2
lordcarlos JDOM und entfernen von children XML & JSON 4
E JDOM - Problem beim Zusammenfügen zweier Dateien XML & JSON 2
T jdom.jar als Relativer Pfad in Eclipse einbinden XML & JSON 4
S XML, UTF-8, JDOM und Umlaute XML & JSON 3
E XML - JDOM - Bäume: was würdet ihr hier machen? XML & JSON 11
A JDOM: Wert schreiben bzw. ändern XML & JSON 6
T JDOM Bibiliothek XML & JSON 3
K JDOM vs. DOM, Schnittstellen XML & JSON 5
P Große XML Datei mittels JDOM bearbeiten / einlesen XML & JSON 6
0x7F800000 jdom mit xml.transform inkompatibel, was soll ich nehmen? XML & JSON 2
T EXSD auslesen mit XPath und JDOM XML & JSON 8
A JDOM und Sonderzeichen < > XML & JSON 17
G Simples XML File einlesen mit JDom. Prefix not bound ? XML & JSON 2
N jdom problem beim lesen von child elementen XML & JSON 5
N problem bei xml lesen mit jdom XML & JSON 2
S Ampersand im Jdom-Element XML & JSON 2
N jdom - xslt-Verweis in .xml einfügen XML & JSON 3
S Jdom+java webstart XML & JSON 4
K html -> cyberneko -> xml -> jdom . XML & JSON 3
I JDom Text ändern XML & JSON 4
C jdom.Element nicht vorhanden? XML & JSON 4
W JDOM element ändern funzt nich :( [problem gelöst] XML & JSON 3
C XPath in JDOM klappt nicht XML & JSON 2
S Harte Nuss mit XML und JDOM XML & JSON 2
H mit JDOM Verarbeitungsanweisungen und Kommentare auslesen XML & JSON 2
B jdom: getChildren() problem XML & JSON 4
T Bild in XML per JDOM XML & JSON 4
D JDOM erzeugt leere xmlns Attribute XML & JSON 4
T Elemente zählen mit JDOM in XML XML & JSON 7
B jdom document aus string erzeugen? XML & JSON 1
M JDOM und XPath, zu Element zugehörigen XPath-Ausdruck XML & JSON 5
F JDOM und XPath - Problem mit Namespace ohne Prefix XML & JSON 5
T XML mit JDOM auslesen => langsam? XML & JSON 7
B jdom outputter ohne attribute XML & JSON 2
C XML encoding UTF-8 und JDOM XML & JSON 4
P Probleme mit JDom . addContent(int index,Collection c) XML & JSON 2
R key aus xml lesen mittels jdom XML & JSON 5
M JDOM Element ohne Inhalt kopieren ? XML & JSON 3
X JDOM SAXBuilder Validationschema - Problem XML & JSON 8
G einzelne tags mit jdom auslesen XML & JSON 4
F XML ( ca. 280 MB) JDom & SAXBuilder lesen = OutOfMemoryE XML & JSON 4
K JDOM SAXBuilder einlesen XML & JSON 6
S Ausgabe "asXML" mit Jdom XML & JSON 2
B Element an bestimmter Stelle einfügen (JDOM) XML & JSON 8
G XML mit JDOM ausgeben [Klappe die 1Mio.ste] XML & JSON 2
F XML mit JDOM auslesen XML & JSON 2
D JDOM auf den PC machen XML & JSON 6
J JDOM Unicode XML & JSON 2
J schema-Validierung mit xerces und jdom: bug in java 1.4? XML & JSON 9
P JDOM Werte verändern XML & JSON 4
S OutOfMemory mit JDOM XML & JSON 6
S org.jdom.document in String umwandeln. XML & JSON 2
M ISO-8859-1 >> UTF-8 + JDOM + Verwirrung. XML & JSON 2
J [Newbie] [JDOM] Element aus XML entfernen klappt nicht XML & JSON 4
J JDOM mit XML-Schema XML & JSON 8
P HTML-Sting in JDOM XML & JSON 7
B JDOM && ObjectOutputStream XML & JSON 8
B Versionskonflikt bei JDOM XML & JSON 9

Ähnliche Java Themen

Neue Themen


Oben