XML ohne JAXB einlesen


whhsg

Grünschnabel
Ich habe bisher XML Daten mit javax.xml eingelesen. Ich suche jetzt für Java13 eine Alternative ohne javax.xml. Ich habe keine Idee wo ich eine Lösung finden kann. Ich arbeite mit Netbeans und habe keine Erfahrung mit Gradle und Maven.
 

ComFreek

Mod | @comfreek
Moderator
Ich arbeite mit Netbeans und habe keine Erfahrung mit Gradle und Maven.
Was für ein Buildsystem nutzt du dann? Wahrscheinlich ein NetBeans-internes, oder?

Ich würde empfehlen auf ein echtes Buildsystem umzusteigen - welches von mir aus mit dem NetBeans-internen synchronisiert sein kann, so wie bei IntelliJ. Ansonsten google einfach mal "java xml". Schau ein bisschen nach Datumsangaben, dann wirst du schon was Gutes finden ;)
 

ComFreek

Mod | @comfreek
Moderator
(Du kannst auch jede andere Lib, die über Maven oder eine andere Paketzentrale vertrieben wird, als *.jar herunterladen und so nutzen. Wenn du über die Mavenwebsite deine gewünschte Library gefunden hast, etwa diese zufällig ausgewählte Library, siehst du rechts einen Downloadicon.)
 

whhsg

Grünschnabel
Bisher habe ich Ant in Netbeans genutzt. Ich habe bisher erfolglos nach einem Netbeans-Projekt gesucht, welches Gradle oder Maven nutzt. Ich bevorzuge es, in solchen Fällen mir ein Beispiel-Projekt anzusehen bzw. in dieses Beispiel-Projekt mein Projekt einzubinden. Ich habe mich bisher noch nie so intensiv mit dem Projekt erzeugen beschäftigt und das auch nie gelernt. Und da ich auch nur sporadisch mit meinen privaten Java-Projekten arbeite, fehlt mir auch die Muse wochenlang nach einer Lösung zu suchen.
Bei dem XOM macht ich übrig zur Zeit auch stutzig, dass es auf einen SAX parser zurückgreift. Denn der will doch eigentlich auch auf jaxb mit javax.xml zugreifen
 

ComFreek

Mod | @comfreek
Moderator
Auf Anhieb habe ich folgende Links sofort via Google gefunden:
Und da ich auch nur sporadisch mit meinen privaten Java-Projekten arbeite, fehlt mir auch die Muse wochenlang nach einer Lösung zu suchen.
Das kann ich gut nachvollziehen. Dieses Problem hatte ich bei JavaScript-Buildsystemen vor paar Monaten. Unglaublich, wie viel Konfigurationsarbeit du da teilweise brauchst. Und dann kommen ganz komische Fehlermeldungen. Aber die obigen Links klingen da hoffnungsvoller.

[...] dass es auf einen SAX parser zurückgreift. Denn der will doch eigentlich auch auf jaxb mit javax.xml zugreifen
Diese Argumentation ich nicht nachvollziehen. Könntest du das vielleicht ausführen? :)
 

whhsg

Grünschnabel
Vielen Dank, das sieht richtig gut aus. Ich werde mich nach den Feiertagen mal drum kümmern. Irgendwie habe ich auch immer Probleme, den richtigen Suchinhalt bei der Google-Suche zu verwenden.
 

whhsg

Grünschnabel
Ich habe jetzt festgestellt, dass ja immer noch einige Komponenten von javax.xml zur Verfügung stehen und ich auch einen SAX-Parser nutzen könnte. Allerdings habe ich mich vor 5 Jahren gefreut, dass ich alle Programme von Ini-Dateien auf XML-Files umgestellt habe und die mit relativ wenig Aufwand einlesen konnte. Wenn ich aber sehe, dass ich im SAX-Parser die Texte extra auswerten muss, wäre es schön wenn es für meine bisherige Lösung einen komfortablen Ersatz gäbe.

AllInitValues.java
Java:
package getnok;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
  "S_URL",
  "SCLASS"
})
@XmlRootElement(name = "allInitValues")
public class AllInitValues {
  @XmlElement(name = "S_URL")
  public String S_URL;
  @XmlElement(name = "SCLASS")
  public String SCLASS;

  public AllInitValues() {
  }

}

ObjectFactory.java

Java:
package getnok;

import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;

@XmlRegistry
public class ObjectFactory {

  private final static QName _AllInitValues_QNAME = new QName("", "AllInitValues");

  public ObjectFactory() {
  }

  public AllInitValues createAllInitValues() {
    return new AllInitValues();
  }

  @XmlElementDecl(namespace = "", name = "AllInitValues")
  public JAXBElement<AllInitValues> createAllInitValues(
          AllInitValues value) {
    return new JAXBElement<>(_AllInitValues_QNAME, AllInitValues.class, null, value);
  }
}
GetNOK.java
Java:
package getnok;

import GreLib.FinanzHTMLBasis;
import GreLib.logging.HTMLLogTool;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

public class GetNOK implements FinanzHTMLBasis {

    public static AllInitValues mAIV = new AllInitValues();
    public final static String CNAME = "GetNOK";
    public static String logName = CNAME;
    public static HTMLLogTool htmlLogTool;
    public static String mFILE_PFAD = System.getProperty("user.home") + "\\Ini_Files\\";

    public static void main(String[] args) {
        File xmlFile = new File(mFILE_PFAD + CNAME + ".xml");
        try {
            Unmarshaller unmarshaller = JAXBContext.newInstance(CNAME.toLowerCase())
                    .createUnmarshaller();
            mAIV = (AllInitValues) unmarshaller.unmarshal(new FileReader(xmlFile));
        } catch (JAXBException | FileNotFoundException e) {
            htmlLogTool.htmlLogHandler.reportException(e, CNAME, -1, "Ohne", "unmarshal");
        }
    }
Ich würde gerne auch weiter mit meinen Netbeans-ANT-Projekten unter Java 13 arbeiten.
 

ComFreek

Mod | @comfreek
Moderator
Ich verstehe nicht genau dein Problem. Wieso arbeitest du mit einem SAX-Parser, wenn du keinen SAX-Parser möchtest? Wurde javax.xml etwa aus Java 13 entfernt? Via Google finde ich dazu nichts.
 

whhsg

Grünschnabel
Erst einmal vielen Dank für Deine Geduld.
Mit Java 11 wurde JAXB entfernt (Dinge die mit Java 11 entfernt werden). Ich hatte selber nach Alternativen zu JAXB gesucht und hatte dabei den SAX-Parser gefunden, wusste jedoch zum Anfang noch nicht wie der SAX-Parser funktioniert. Ich habe Beispiele mit einem kleinen Code-Ausschnitt gefunden, wie man mit Gradle das fehlende JAXB umgehen kann. Da ich habe bisher keine vollständigen Netbeans-Projekte gefunden habe, welche zusätzliche jar-Files einbinden, auch ausgeführt werden können und zeigen wo dieser Code-Ausschnitt eingefügt werden muss, wollte ich den heute beschriebenen Weg gehen.
 

ComFreek

Mod | @comfreek
Moderator
Ah, aber JAXB != javax.xml.*.

Ich würde gerne auch weiter mit meinen Netbeans-ANT-Projekten unter Java 13 arbeiten.
So wie ich das auf die Schnelle durch paar Google-Suchen mitbekommen habe, ist ANT am Aussterben. Sei also gewarnt :)

Ansonsten schlägt NetBeans: How to add library from Maven repo for non-maven project vor, Ant-Ivy zu nutzen. Ich tippe also darauf, dass du nur deine Dependency auf Mavencentral.org finden musst, etwa diese hier (das ist eine x-beliebige), dann auf den Tab "Ivy" klicken musst auf der Website und das XML kopieren musst. Diesen XML-Schnipsel fügst du dann in deine Build-XML-Datei von ANT ein.
 

Neue Beiträge