2013-07-31 17 views
13

Bu künt soru için üzgünüz. Ama birçoğu bu 2 terimini gün içinde ve gün içinde kullanıyorum ama henüz bilmiyorum. Bunun üzerinde bir çalışma yaptım ve bunun ayrı olduğunu biliyordum. Ama bunun nasıl bir ilişki olduğunu anlama. İlk önce bu iki şeyi anladığım şeyi paylaşacağım.JAXB ve JAXRS nedir? Nasıl ilişkilidir?

JAXB dönüşümleri şema ve Java nesneleri arasında ve XML örneği belgelerinde ve Java nesne örnekleri arasındaki sağlayan XML to-Java bağlayıcı bir teknolojidir. Dahili olarak JAXB, tüm bu dönüşümleri xml ve java arasında yapar. Bu, xml'nin bir ayrıştırıcısıdır ve sonra xml'deki bileşeninin java'da ne olduğunu ve kırıldığını bilir. Bu cevabın JAXB'den dönüştürülmesi, xjc (veya codgen eklentisi) gibi araçlarla yapılır. Haritalama

xsd gibi olabilir: tamsayı java.math.BigInteger

JaxRs farklıdır:

xsd java.lang.String dize. Bu, isteklerinin işlenmesiyle ilgili özellikler kümesidir. "GET ("/foo ")" ifadesinin "anlamı", bir url/foo ile numaralı çağrıyı ele alır. Sadece bunu belirtir. Nasıl yapılır? Evet, bu özelliğin uygulanması için bu denir. Restlet, resteasy, jersey, apache cxf vb. Gibi uygulamalarının sayısı vardır. Bu, mantığa ve matematikte uyguladığınız yönteme benzer. algoritma fikri, kova aramasıdır. Bu, herhangi bir şekilde uygulanabilir. Java terimlerinde JaxRs arabirimidir ve bu 4 restlety, forması, apache cxf arabirimin uygulamalarıdır.

Şimdi benim anlayışım doğruysa lütfen söyleyin. O zaman nasıl olduklarını anlat. Lütfen yardım et . Mümkünse, resimsel bir açıklama daha yararlı olacaktır.

cevap

14

Anlayışınız temel olarak doğrudur. JAXB ve JAX-RS, çoklu uygulamalar ile Java Topluluğu Süreci (JCP) standartlarıdır.

JAXB - Java etki alanı nesnelerini XML'den/öğesine dönüştürmek için standartlaştırılmış meta verileri ve çalışma zamanı API'sini tanımlar.

JAX-RS - RESTful hizmetlerinin oluşturulması için standartlaştırılmış meta verileri ve çalışma zamanı API'sini tanımlar. Varsayılan olarak, application/xml ortam türü JAX-RS, nesneleri XML'den/öğesine dönüştürmek için JAXB'yi kullanır.

bir GET işlemi JAX-SC uygulaması Customer döndürür gerçekleştirilir Aşağıdaki örnekte

Örnek. Bir JAXB impl, Customer örneğini istemcinin alacağı XML'e dönüştürmek için kullanılacaktır.

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

Çok teşekkür ederim. Ama benim 2 sorum var. 1) "JAX-RS uygulama/xml medya türü için varsayılan olarak JAXB kullanacaktır" ifadesiyle ne demek istiyorsunuz? Sonra diğer medya türleri için ne olur. 2) alıntı yaptığınız örnekle ne düşünüyorsunuz? Lütfen açıkla. –

+0

Ya da yorum 1'deki ikinci sorusu temizlendi. Ancak yukarıdaki örnekte, "JAXB impl'sinin Müşteri örneğini XML'ye dönüştürmek için kullanılacağını" söylediniz.Bu kod dahili mi yoksa örnek kod parçacığının kendisinde mi? Örneğin, satır numarasını söyleyebilir misiniz? –

+0

Özel bir 'MessageBodyReader' /' MessageBodyWriter 'sağlayarak 'application/xml''in varsayılan kullanımını geçersiz kılabilirsiniz. Diğer medya türleri için bağımlıdır. 'Uygulama/json' medya türü popüler ancak JAX-RS varsayılan bağlamanın ne olması gerektiğini tanımlamıyor, uygulamalar kendi varsayılanları ile ortaya çıktı. İşte bir örnek: http://blog.bdoughan.com/2013/07/oracle-weblogic-1212-now-with.html –