2013-07-31 13 views
13

Sorry für diese stumpfe Frage. Aber viele benutzen diese 2 Begriffe Tag für Tag, aber ich weiß es nicht. Ich habe etwas darüber studiert und wusste, was es separat ist. Aber verstehe nicht, wie es zusammenhängt. Ich werde zuerst erzählen, was ich über diese beiden verstanden habe.Was ist JAXB und JAXRS? Wie hängen sie zusammen?

JAXB ist XML-to-Java Bindungstechnologie Transformationen ermöglicht zwischen Schema und Java-Objekte und zwischen XML-Instanzdokumente und Java-Objektinstanzen. Intern führt JAXB alle diese Konvertierungen zwischen XML und Java durch. Dies ist ein Parser von XML und dann weiß es, was Komponente in Xml was in Java entspricht und es bricht. Die Konvertierung dieser Antwort von JAXB wird von Tools wie xjc (oder codgen plugin) durchgeführt. Mapping kann wie

XSD sein: string java.lang.String

XSD: integer java.math.BigInteger

JaxRs unterscheidet. Dies ist ein Satz von Spezifikationen für die Bearbeitung von Anfragen. Bedeutet, dass es "GET ("/foo ")" bedeutet, handle einen get Aufruf mit URL/foo. Es besagt nur, dass. Wie es gemacht wird? Ja, das heißt Implementierung dieser Spezifikation. Es gibt eine Reihe von Implementierungen wie Restlet, Resteasy, Jersey, Apache CXF etc. Dies entspricht der Logik und der Art, wie Sie in Mathematik arbeiten. Die Algorithmus Idee ist Bucket-Suche. Dies kann in irgendeiner Weise implementiert werden. In Java Begriffe JaxRs ist Schnittstelle und diese 4 Restlet, Resteasy, Jersey, Apache CXF sind Implementierungen der Schnittstelle.

Jetzt bitte sagen, wenn mein Verständnis korrekt ist. Dann erzähle, wie sie verwandt sind. Bitte helfen Sie. Wenn möglich, wird eine bildliche Erklärung hilfreicher sein.

Antwort

14

Ihr Verständnis ist grundsätzlich richtig. JAXB und JAX-RS sind beide JCP-Standards (Java Community Process) mit mehreren Implementierungen.

JAXB - Definiert standardisierte Metadaten und Laufzeit-API für die Konvertierung von Java-Domänenobjekten zu/von XML.

JAX-RS - Definiert standardisierte Metadaten und Laufzeit-API für die Erstellung von RESTful-Diensten. Standardmäßig verwendet JAX-RS für den Medientyp application/xml JAXB, um die Objekte in/aus XML zu konvertieren.

Beispiel

Im folgenden Beispiel, wenn ein Betrieb der GET JAX-RS eine Implementierung Customer kehrt durchgeführt wird. Ein JAXB-Impl wird verwendet, um diese Instanz von Customer in das XML zu konvertieren, das der Client tatsächlich empfängt.

package org.example.service; 

import javax.ejb.*; 
import javax.ws.rs.*; 
import javax.ws.rs.core.MediaType; 
import org.example.model.*; 

@Stateless 
@LocalBean 
@Path("/customers") 
public class CustomerResource { 

    @GET 
    @Produces(MediaType.APPLICATION_XML) 
    @Path("{id}") 
    public Customer read(@PathParam("id") int id) { 
     Customer customer = new Customer(); 
     customer.setId(id); 
     customer.setFirstName("Jane"); 
     customer.setLastName(null); 

     PhoneNumber pn = new PhoneNumber(); 
     pn.setType("work"); 
     pn.setValue("5551111"); 
     customer.getPhoneNumbers().add(pn); 

     return customer; 
    } 

} 
+0

Vielen Dank. Aber ich habe 2 Fragen. 1) Was meinst du mit der Aussage "Standardmäßig wird für die Anwendung/xml media typ JAX-RS JAXB verwenden". Was passiert dann für andere Medientypen? 2) Was betonst du an dem von dir zitierten Beispiel? Bitte klären Sie. –

+0

Ya zweite Frage von mir in Kommentar 1 wurde gelöscht. Aber oberhalb des Beispiels haben Sie gesagt: "JAXB impl wird verwendet, um diese Instanz des Kunden in XML zu konvertieren".Ist dieser Code intern oder ist es im Beispiel Code-Snippet selbst? Wenn Sie zum Beispiel die Zeilennummer angeben können? –

+0

Sie können die Standardbehandlung von 'application/xml' überschreiben, indem Sie einen benutzerdefinierten 'MessageBodyReader' /' MessageBodyWriter' bereitstellen. Für andere Medientypen hängt es davon ab. Der 'application/json' Medientyp ist populär, aber JAX-RS legt nicht fest, was die Standardbindung sein soll, Implementierungen haben eigene Standardwerte. Hier ist ein Beispiel: http://blog.bdoughan.com/2013/07/oracle-weblogic-1212-now-with.html –