2013-07-31 26 views
13

Ci scusiamo per questa domanda smussata. Ma molti usano questi due termini giorno dopo giorno, ma non lo so. Ho fatto qualche studio su questo e sapevo cosa fosse separatamente. Ma non capisco come è correlato. Condividerò ciò che ho capito di questi due prima.Che cos'è JAXB e JAXRS? Come sono collegati?

JAXB è XML-to-Java la tecnologia di legame permettendo trasformazioni tra schema e gli oggetti Java e XML tra istanze documenti e le istanze di oggetti Java. Internamente JAXB esegue tutte queste conversioni tra xml e java. Questo è un parser di xml e quindi sa quale componente in xml corrisponde a ciò che in java e si interrompe. La conversione di questa risposta da JAXB è fatta da strumenti come xjc (o il plug-in di codifica ). Mappatura può essere come

xsd: string java.lang.String

xsd: integer java.math.BigInteger

jaxrs è diverso. Questo è un insieme di specifiche per la gestione delle richieste . Significa che dice "GET ("/foo ")" significa gestire una chiamata get con url/foo. Lo afferma solo Come è fatto? Sì, che è chiamato implementazione di questa specifica. Ci sono un numero di implementazioni come restlet, resteasy, jersey, apache cxf ecc. Questo è analogo alla logica e al modo in cui si implementa in matematica. l'idea dell'algoritmo è la ricerca del bucket. Può essere implementata in qualsiasi modo. In termini java JaxRs è l'interfaccia e questi 4 restlety, resteasy, jersey, apache cxf sono implementazioni dell'interfaccia.

Ora, per favore, dì se la mia comprensione è corretta. Poi racconta come sono collegati. Per favore aiuto . Se possibile, una spiegazione pittorica sarà più utile.

risposta

14

La tua comprensione è fondamentalmente corretta. JAXB e JAX-RS sono entrambi gli standard JCP (Java Community Process) con più implementazioni.

JAXB - Definisce i metadati standard e l'API di runtime per la conversione di oggetti di dominio Java in/da XML.

JAX-RS - Definisce i metadati e le API di runtime standardizzati per la creazione di servizi RESTful. Per impostazione predefinita per il tipo di supporto application/xml JAX-RS utilizzerà JAXB per convertire gli oggetti in/da XML.

Esempio

Nel seguente esempio quando un'operazione GET viene eseguita l'attuazione JAX-RS restituirà un Customer. Un impl JAXB verrà utilizzato per convertire l'istanza di Customer nell'XML che verrà effettivamente ricevuto dal client.

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

Grazie mille. Ma ho 2 domande. 1) cosa intendi con la frase "Di default per l'applicazione/il tipo di supporto xml JAX-RS userà JAXB". Quindi cosa succede per altri tipi di media. 2) cosa sottolinei con l'esempio che hai citato. Si prega di precisare. –

+0

La seconda domanda di Ya nel commento 1 è stata cancellata. Ma sopra l'esempio hai detto "JAXB impl sarà usato per convertire quell'istanza di Cliente in XML".Questo codice è interno o è nello snippet di codice di esempio? Se nell'esempio puoi dire il numero della linea? –

+0

È possibile sovrascrivere la gestione predefinita di 'application/xml' fornendo un' MessageBodyReader'/'MessageBodyWriter' personalizzato. Per altri tipi di media dipende. Il tipo di supporto 'application/json' è popolare ma JAX-RS non definisce quale dovrebbe essere il binding predefinito, le implementazioni hanno creato i propri valori di default. Ecco un esempio: http://blog.bdoughan.com/2013/07/oracle-weblogic-1212-now-with.html –

Problemi correlati