2010-01-11 5 views
9

Was ist der Unterschied zwischen Castor XML und JAXB-Bindung, da beide Java-Objekt an XML binden und umgekehrt.Was ist der Unterschied zwischen Castor XML-Bindung und JAXB-Bindung?

Aktualisiert:

Als Castor verwenden Ich kann diese packageA.ClassA und packageB.ClassA haben dieselben Attribute und Klassennamen wurden nur, dass sie in verschiedenen Paket befindet Angenommen tun.

packageA.ClassA - > XML -> packageB.ClassA 

von JAXB verwenden, wenn ich dieses Objekt packageA.ClassA zu XML Marshall tue und von XML unmarshall in packageB.ClassA Objekt bekam ich Fehler Casting.

Antwort

15

Bitte beachten Sie, dass JAXB eine API ist und mehrere Implementierungen verfügbar sind.

Sun stellt eine Referenzimplementierung bereit und verpackt sie mit J2EE (ebenfalls in J2SE 1.6 verfügbar). Castor wurde geboren, bevor JAXB von Sun kam und bietet einige zusätzliche Funktionen. Wenn Sie jedoch nur eine einfache XML-Bindung wünschen, sollte die Sun-Referenzreferenz sehr gut funktionieren.

Es gibt eine große article in JavaWorld auf diesem. Ein bisschen alt, aber die meisten Ideen, die dort erklärt werden, sind immer noch gut. Und Sie werden nicht den Artikel finden, der JAXB Annotationen erwähnt, die die Dinge heutzutage einfacher gemacht haben.

Simple ist ein einfach zu verwendendes Bindungsframework und arbeitet mit minimaler "einfacher" Konfiguration.

DOM ist ein völlig anderes Konzept - es dreht sich nur um das Parsen und tut nichts gegen das Binden. Mit einem DOM-Parser können Sie Daten aus XML extrahieren. Aber es gibt Ihnen keine Objekt-Mapping-Möglichkeit. Daher müssen Sie die Daten immer noch mit DOM abrufen und dann Code schreiben, um diese Daten in ein Java-Objekt zu übertragen.

+0

Hallo Dank für die Erklärung sehr klar über das DOM-Konzept – user236501

+0

@newbie: Wenn Sie diese Antwort mögen, bitte in Betracht ziehen, es zu akzeptieren oder zumindest ein upvote geben. Vielen Dank! –

3

Sie erhalten die Klassenausnahme, weil eine gegebene JAXBContext Instanz jeden Namen des Stamm-XML-Elements einer Bindungsklasse zuordnet.

Wenn Sie also packageA.ClassA zu XML marshalieren und es dann wieder zurückmarshalieren, wird das Ergebnis ein packageA.ClassA sein, und Sie können das nicht umsetzen.

Wenn Sie eine packageB.ClassA entpacken möchten, müssen Sie eine zweite JAXBContext erstellen. Die erste JAXBContext kennt packageA.ClassA, die zweite kennt packageB.ClassA. Verwenden Sie die erste für das Marshalling nach XML, die zweite für das Unmarshalling. Das wird so funktionieren, wie Sie es erwarten.