Yaml File lesen und in Objekte umwandel (SnakeYAML / YamlBeans)

JBoby

Neues Mitglied
Servus Leute,

ich bin neu im Forum also wenn ich hier im falschen Thread gelandet bin oder wichtige Infos fehlen, dann weist mich einfach darauf hin. :)

Hier schon mal ein paar Links zu den Librarys / Websites die ich verwendet habe:

snakeYAML: https://bitbucket.org/asomov/snakeyaml
YamlBeans: https://github.com/EsotericSoftware/yamlbeans
Allgemeine yaml Seite: http://yaml.org/

Also nun zu meinem Problem/Frage ich arbeite Momentan an einem Tool für ein Online-Spiel (EvE-Online vielleicht erkennen manche dann schon meine Zielsetzung). Bei dem Tool muss ich Dateien die vom Spielhersteller zu jedem Patch herausgegeben werden einlesen, diese Dateien sind .yaml Files und enthalten unter anderem Informationen über Items (z.B. ID's, Namen, Volumen etc.). Der Inhalt sieht ungefähr so aus:


nqD7lsz.png



Jetzt wollte ich diese Dateien mithilfe der Library snakeyaml einlesen und zu Objekten umwandeln.
Dazu habe ich mir mal eine ganz einfache Klasse geschrieben:

Java:
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.error.YAMLException;


public class Yaml_Reader {
   
    public Yaml_Reader() throws IOException{
        try {
            this.loadYamlFile();
        } catch (YAMLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
    }
   
    public void loadYamlFile() throws IOException{
       
       
        FileReader file = new FileReader("D:/Eigene Dateien/Downloads/Games/Eve-Online/Static Data/Aegis_1.2_114300_db/skinMaterials.yaml");   
        Yaml yaml = new Yaml();
   
        skinMaterials skinM =  yaml.loadAs(file, skinMaterials.class);
               
        System.out.println(skinM.getSkinMaterialID());
           
       
    }
   

    public static void main(String[] args) throws IOException {
        new Yaml_Reader();
    }

}

Die skinMaterials-Klasse habe ich noch als Config geschrieben, damit snakeYAML weiß, wie er den Inhalt der Datei umwandelt muss.

Java:
public class skinMaterials {

   
    private String colorHull;
    private String colorPrimary;
    private String colorSecondary;
    private String colorWindow;
    private int displayNameID;
    private String material;
    private int skinMaterialID;
   
   
    public String getColorHull() {
        return colorHull;
    }
    public void setColorHull(String colorHull) {
        this.colorHull = colorHull;
    }
    public String getColorPrimary() {
        return colorPrimary;
    }
    public void setColorPrimary(String colorPrimary) {
        this.colorPrimary = colorPrimary;
    }
    public String getColorSecondary() {
        return colorSecondary;
    }
    public void setColorSecondary(String colorSecondary) {
        this.colorSecondary = colorSecondary;
    }
    public String getColorWindow() {
        return colorWindow;
    }
    public void setColorWindow(String colorWindow) {
        this.colorWindow = colorWindow;
    }
    public int getDisplayNameID() {
        return displayNameID;
    }
    public void setDisplayNameID(int displayNameID) {
        this.displayNameID = displayNameID;
    }
    public String getMaterial() {
        return material;
    }
    public void setMaterial(String material) {
        this.material = material;
    }
    public int getSkinMaterialID() {
        return skinMaterialID;
    }
    public void setSkinMaterialID(int skinMaterialID) {
        this.skinMaterialID = skinMaterialID;
    }
   
   
   
}

Jetzt habe ich aber folgende Fehlermeldung bekommen:

Java:
Can't construct a java object for tag:yaml.org,2002:skinMaterials; exception=Class not found: skinMaterials
in "<reader>", line 1, column 1:
    1:
    ^

    at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:333)
    at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:183)
    at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:142)
    at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:128)
    at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:480)
    at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:440)
    at Yaml_Reader.loadYamlFile(Yaml_Reader.java:39)
    at Yaml_Reader.<init>(Yaml_Reader.java:20)
    at Yaml_Reader.main(Yaml_Reader.java:49)
Caused by: org.yaml.snakeyaml.error.YAMLException: Class not found: skinMaterials
    at org.yaml.snakeyaml.constructor.Constructor.getClassForNode(Constructor.java:634)
    at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.getConstructor(Constructor.java:321)
    at org.yaml.sn

So dumm gelaufen dachte ich mir, also hab ich einfach mal eine andere Library verwenden, nämlich YamlBeans und zwar mit folgendem Code:

Java:
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.esotericsoftware.yamlbeans.YamlException;
import com.esotericsoftware.yamlbeans.YamlReader;


public class Yaml_Reader {
   
   
   
   
   
    public Yaml_Reader() throws IOException{
        try {
            this.loadYamlFile();
        } catch (YamlException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
    }
   
   
    public void loadYamlFile() throws IOException{
       
       
        FileReader file = new FileReader("D:/Eigene Dateien/Downloads/Games/Eve-Online/Static Data/Aegis_1.2_114300_db/skinMaterials.yaml");   
        YamlReader yaml = new YamlReader(file);
        skinMaterials  skinM = yaml.read(skinMaterials.class);
       
               
        System.out.println(skinM.getSkinMaterialID());
           
       
    }
   
   

    public static void main(String[] args) throws IOException {
        new Yaml_Reader();
    }

}


Und wer hätte es gedacht, wieder kam nur Mist raus:

Java:
com.esotericsoftware.yamlbeans.YamlReader$YamlReaderException: Line 0, column 2: Unable to find property '1' on class: skinMaterials
    at com.esotericsoftware.yamlbeans.YamlReader.readValueInternal(YamlReader.java:264)
    at com.esotericsoftware.yamlbeans.YamlReader.readValue(YamlReader.java:154)
    at com.esotericsoftware.yamlbeans.YamlReader.read(YamlReader.java:107)
    at com.esotericsoftware.yamlbeans.YamlReader.read(YamlReader.java:92)
    at Yaml_Reader.loadYamlFile(Yaml_Reader.java:34)
    at Yaml_Reader.<init>(Yaml_Reader.java:20)
    at Yaml_Reader.main(Yaml_Reader.java:45)

Aber diesmal wusste ich anhand der Fehlermeldung warum es nicht funktioniert hat, nämlich weil die "ID's" die immer am Anfang jedes "Objektes" stehen gar nicht in der Config stehen. Also hab ich zum Testen einfach mal eines davon rauskopiert:

joH6981.png

Und siehe da, es kam diesmal tatsächlich eine 1 raus :D

So jetzt habe ich also ne ganze Menge Probleme:

1. Mein Test bringt mich ja nun nicht unbedingt weiter, ich muss dem Parser in der config ja irgendwie beibringen, dass die "ID's" am Anfang (1,2,3,4...) auch teile der Objekte und nicht die Objekttypen sind.

2. Ich muss/will die Objekte in einer HashMap laden, sonst habe ich ja nicht allzu viel davon, momentan würde nur eines der Objekte (und zwar das zuletzt) geladene in der Variable skinM bestehen bleiben.

3. Weil das Laden noch nicht funktioniert kann ich folgenden "Sonderfall" nicht testen:
jLAaP7q.png

In dieser Datei (die eigentlich wichtigste Datei) hat nicht jedes Objekt alle die gleichen Attributen bei manchen gibt es wie hier im Bild keine "soundID" oder eine "mass". Wie geht der Parser damit um wenn in der Config alle Attribute aufgeführt sind aber in der Datei manche davon fehlen?


Ich hoffe ihr könnt mir weiterhelfen denn ansonsten werde ich wohl gezwungen sein mir mit dem FileReader und massig if-Abfragen mit .equals was zurechtzubasteln und ich denke nicht dass das nötig ist, sondern das ich momentan nur zu blöd / unwissend bin um die Libraries richtig anzuwenden.

Danke schonmal im Vorraus

JBoby
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Liste in YAML Datei speichern und wieder auslesen XML & JSON 1
E JAXB und java.nio.file.Path XML & JSON 4
Trèfle Formatierung v. JSON File XML & JSON 7
L login - Java IOException jaas.config File or Directory not present XML & JSON 1
G Probleme mit Jsoup in .jar File XML & JSON 11
K JAR-File mit XML-Datei XML & JSON 1
O XML Zugriff auf Entity File XML & JSON 0
B xsd-Datei ins jar file XML & JSON 5
S XLSX-File NoSuchMethodError XML & JSON 7
M SEPA XML file XML & JSON 11
S Xml File für den Aufbau einer anderen Xml Datei XML & JSON 6
S XML file lässt sich in Eclipse nicht erstellen XML & JSON 2
M <root> node in bestehendes XML-File XML & JSON 8
jstei001 .xsd File wärend der Laufzeit einlesen und XMl rausschreiben XML & JSON 5
L Datenstruktur in XML-File schreiben XML & JSON 2
Q XML-File als Objekt in Java XML & JSON 6
G DXF-File schreiben XML & JSON 17
GUI-Programmer java.io.File aus .jar beziehen XML & JSON 6
B XML file erstellen und in lesbarer form speichern XML & JSON 2
M XML File generieren XML & JSON 3
S Aus XML-File eine Baumstruktur erzeugen XML & JSON 5
N XML File aus Internet korrekt mit absätzen formatiert abspeichern XML & JSON 10
J xmlParser/-Writer: DTD in seperates File auslagern XML & JSON 4
C Xml file gegen eine DTD validieren XML & JSON 3
G Problem beim schreiben von XML in eine File XML & JSON 2
S Premature end of file XML & JSON 7
T File öffnen XML & JSON 6
B XML file für schtasks XML & JSON 5
G Simples XML File einlesen mit JDom. Prefix not bound ? XML & JSON 2
G Xml File schematisch auslesen XML & JSON 2
J File objekt in xml speichern? XML & JSON 12
G XMLEncoder: discarding statement LinkedList.add(File) XML & JSON 16
X XML File auslesen/parsen u. in ne Hashmap speichern XML & JSON 2
M Unhierarchisches XML-File mit DOM-Parser auswerten XML & JSON 5
M XML File während Applet-Start auslesen? XML & JSON 10
X Einzelne Tags rausnehmen aus einem großen XML-file XML & JSON 4
E XOM setzen von XML-Schema declaration beim erzeugen XML-File XML & JSON 2
M XSL-File für Transformation verwenden XML & JSON 3
M XML-File verabeiten XML & JSON 19
A XML-File auslesen, alles leer? XML & JSON 2
S Geändertes XML-File wieder abspeichern. XML & JSON 10
D XML-file mit Eclipse erstellen + Namespaces XML & JSON 2
A html-File nach txt-File konvertieren XML & JSON 15
K XML to file geht nicht :( XML & JSON 4
A Internetinhalte auslesen und in einem XML-File speichern XML & JSON 4
T select-statement aus mysql in ein xml-file umwandeln XML & JSON 3
J XML File updaten XML & JSON 2
A XML-file an der Konsole ausgeben XML & JSON 4
D In ein XML File meinStyleSheet.css eintragen? XML & JSON 9
J Client für WebService programmieren (aus WSDL-File) XML & JSON 15
R wie kann ich ein xml file in einen string einlesen? XML & JSON 2
M *.group() in File auslesen XML & JSON 4
A XML-File ausgeben XML & JSON 2
W aus XML-File gelesenes als Methodenaufruf verwenden XML & JSON 5
T Elemente aus XML-File löschen (JDom) XML & JSON 9
T [JDOM] XML File, neue Daten hinzufügen XML & JSON 5
D Aus Java XML-File an PHP-Skript senden: Encodingproblem? XML & JSON 3
T Prob: Auslesen XML File mit JDOM XML & JSON 2
B DOM oder HTML File drucken "wie ein Browser es zeigen w XML & JSON 3
B Klassen mit generischen Attributen mit Jackson lesen XML & JSON 4
H XMLConfiguration(1.10)/getString : Wert "E" aus <version type="Auto">E</version>n lesen XML & JSON 15
C einfach XML lesen XML & JSON 4
E Einzelne Tags der context.xml lesen XML & JSON 1
W Json von URL Lesen (mit Gson Library) XML & JSON 3
W Json von URL Lesen XML & JSON 2
G Jsoup Daten lesen XML & JSON 0
F KindElemente lesen und begrenzen XML & JSON 0
P Bestimmte XML-Inhalte in String lesen XML & JSON 2
B XML aus einer URL im Internet lesen (JDOM) XML & JSON 4
P Komfortabel XML Dokumente schreiben und lesen XML & JSON 6
Maxim6394 Lesen/Schreiben von XML Datei XML & JSON 9
D Aus lesen einer XML-Datei ( 1 root, 3 childs) XML & JSON 7
R XLM Datei lesen Ändern (kompliziertes Search and Replace) und Speichern XML & JSON 12
S XML lesen und schreiben XML & JSON 2
Q Atom/RSS-Feed lesen - per XSD zu Java-Code XML & JSON 4
K JAXB: Klassen mit Annotation Lesen/Schreiben XML XML & JSON 3
O PDF mit Pdfbox lesen XML & JSON 3
S XMLStreamReader, letzten eintrag eines xml lesen? XML & JSON 5
N MalformedByteSequenceException bei Lesen aus XML Datei XML & JSON 2
Mike90 Daten aus DB in ExcelTabelle lesen + bearbeiten + formatieren XML & JSON 2
Mike90 -xlsx Dateien in Java lesen XML & JSON 3
Fadi .classpath(XML) mit Java lesen XML & JSON 2
J Problem beim XML-Lesen XML & JSON 2
J Logdaten als XML speichern und lesen XML & JSON 2
J XML lesen schreiben XML & JSON 7
N jdom problem beim lesen von child elementen XML & JSON 5
N problem bei xml lesen mit jdom XML & JSON 2
T Xml lesen und in .txt zeilenweise schreiben XML & JSON 4
L Einfaches XML Lesen und Schreiben XML & JSON 4
C SAX Probleme beim lesen XML & JSON 4
O OpenDocument-Tabelle mit Java lesen und schreiben XML & JSON 3
R key aus xml lesen mittels jdom XML & JSON 5
F XML ( ca. 280 MB) JDom & SAXBuilder lesen = OutOfMemoryE XML & JSON 4
O XML lesen, wenn DTD in anderem Verzeichnis XML & JSON 2
R Daten aus xml lesen und in Strings speichern XML & JSON 4
R xml mit Jdom lesen und als Jtree anzeigen. XML & JSON 9
J Jdom Elemente lesen XML & JSON 5
thE_29 Vor dem ersten Posten bitte lesen! XML & JSON 0

Ähnliche Java Themen

Neue Themen


Oben