Was ist der Unterschied zwischen JAXP und JAXB?

80

Was ist der Unterschied zwischen JAXP und JAXB?

Jothi
quelle
Zu Ihrer Information, siehe Oracle Tutorials für JAXP und für JAXB .
Basil Bourque

Antworten:

69

JAXP (Java API für XML-Verarbeitung) ist ein ziemlich veralteter Überbegriff, der die verschiedenen XML-APIs auf niedriger Ebene in JavaSE wie DOM, SAX und StAX abdeckt.

JAXB (Java Architecture for XML Binding) ist eine spezielle API (das Material unter javax.xml.bind), die Anmerkungen verwendet, um XML-Dokumente an ein Java-Objektmodell zu binden.

Skaffman
quelle
1
Neben dem Parsen (DOM, SAX usw.) enthält JAXP meines Erachtens auch APIs für Aufgaben wie das Auswerten von XPath, das Durchführen von XSLT-Transformationen und das Überprüfen von XML anhand eines Schemas. Ich erinnere mich, dass ich javax.xml.validationKlassen verwendet habe, um eingehende Anforderungen anhand der XSDs meines Dienstes zu validieren, damit Kunden Probleme selbst beheben können.
spaaarky21
49

JAXP ist eine Java-API für die XML-Verarbeitung, die uns eine Plattform zum Parsen der XML-Dateien mit den DOM- oder SAX-Parsern bietet.

Da es sich bei JAXB um Java Architecture for XML Binding handelt, wird der Zugriff auf XML-Dokumente aus Anwendungen, die in der Programmiersprache Java geschrieben sind, erleichtert.

Beispiel: Computer.xml-Datei: Wenn wir mit JAXP auf die Daten zugreifen möchten, führen wir die folgenden Schritte aus

  1. Erstellen Sie einen SAX-Parser oder DOM-Parser und durchsuchen Sie die Daten. Wenn wir DOM verwenden, kann es speicherintensiv sein, wenn das Dokument zu groß ist. Angenommen, wenn wir den SAX-Parser verwenden, müssen wir den Anfang des Dokuments identifizieren. Wenn es auf etwas Bedeutendes stößt (in SAX-Begriffen auf ein "Ereignis"), wie den Start eines XML-Tags oder den Text innerhalb eines Tags, stellt es diese Daten der aufrufenden Anwendung zur Verfügung.
  2. Erstellen Sie dann einen Inhaltshandler, der die Methoden definiert, die vom Parser benachrichtigt werden sollen, wenn ein Ereignis auftritt. Diese als Rückrufmethoden bezeichneten Methoden ergreifen die entsprechenden Maßnahmen für die empfangenen Daten.

Dieselben Vorgänge, wenn sie von JAXB ausgeführt werden, müssen die folgenden Schritte ausgeführt werden, um auf die Datei Computer.xml zuzugreifen

  1. Binden Sie das Schema für das XML-Dokument.
  2. Hängen Sie das Dokument in Java-Inhaltsobjekte auf. Die Java-Inhaltsobjekte stellen den Inhalt und die Organisation des XML-Dokuments dar und stehen Ihrem Programm direkt zur Verfügung. Nach dem Aufheben der Marshalling-Funktion kann Ihr Programm auf die Daten im XML-Dokument zugreifen und diese anzeigen, indem Sie einfach auf die Daten in den Java-Inhaltsobjekten zugreifen und diese dann anzeigen. Es ist nicht erforderlich, einen Parser zu erstellen und zu verwenden, und es muss kein Inhaltshandler mit Rückrufmethoden geschrieben werden. Dies bedeutet, dass Entwickler auf XML-Daten zugreifen und diese verarbeiten können, ohne die XML- oder XML-Verarbeitung kennen zu müssen
gmhk
quelle
DOM behandelt die XML-Datei als Objekt, wobei SAX einzelne Elemente als Ereignisse behandelt. Was ist effizienter?
Malwaregeek
5
@Malwaregeek: Abhängig von der Situation ist SAX vorzuziehen, wenn Sie in der sequentiellen Reihenfolge auf das gesamte XML zugreifen, da weniger Speicher benötigt wird. DOM ist vorzuziehen, wenn Sie einen zufälligen Zugriff auf mittlere Elemente in einem XML-Dokument wünschen. Es benötigt jedoch mehr Speicher. Diese Balance ist ähnlich wie Memory Vs Time Space Balance in jedem Programm
Rengasami Ramanujam
1

Der Hauptunterschied besteht darin, welche Rolle das XML-Schema spielt. JAXP ist veraltet, ohne das XML-Schema zu kennen, während JAXB die Schemabindung als ersten Schritt behandelt.

Denis Wang
quelle
Das JAXP- Lernprogramm ( JSR 206 ) im Abschnitt „Implementieren der SAX-Validierung“ enthält einen Abschnitt zum Thema „Validieren mit XML-Schema“. In der Spezifikation wird auch die Schema- Klasse als Teil der JAXP-API erwähnt. (Es wurde nach seiner Aufnahme in OpenJDK 7 als eigenständiges Projekt zurückgezogen, siehe Abschnitt 11.5 im Spezifikations-PDF von JAXP 1.6.)
Olivier Cailloux