2013-07-31 63 views
13

Xin lỗi vì câu hỏi cùn này. Nhưng nhiều người sử dụng 2 thuật ngữ này cả ngày lẫn ngày, nhưng tôi không biết. Tôi đã nghiên cứu về điều này và biết nó là gì. Nhưng đừng hiểu nó liên quan như thế nào. Tôi sẽ chia sẻ những gì tôi hiểu về hai điều này trước tiên.JAXB và JAXRS là gì? Họ có liên quan với nhau như thê nào?

JAXB là XML-to-Java ràng buộc công nghệ cho phép biến đổi giữa lược đồ và các đối tượng Java và giữa các tài liệu XML và trường hợp đối tượng Java. JAXB nội bộ thực hiện tất cả các chuyển đổi này giữa xml và java. Đây là một phân tích cú pháp của xml và sau đó nó biết những gì thành phần trong xml tương ứng với những gì trong java và nó phá vỡ. Việc chuyển đổi câu trả lời này từ JAXB được thực hiện bằng các công cụ như xjc (hoặc plugin codgen). Lập bản đồ có thể giống như

xsd: string java.lang.String

xsd: integer java.math.BigInteger

JaxRs là khác nhau. Đây là bộ thông số để xử lý các yêu cầu . Điều đó có nghĩa là "GET ("/foo ")" có nghĩa là xử lý cuộc gọi nhận bằng url/foo. Nó chỉ nói rằng. Nó được thực hiện như thế nào ? Có, rằng được gọi là triển khai thông số này. Có số lượng các triển khai như thiết bị đầu cuối, resteasy, jersey, apache cxf vv. Đây là sự tương tự với logic và cách bạn thực hiện trong toán học. Ý tưởng thuật toán là tìm kiếm theo nhóm. Điều này có thể được triển khai theo bất kỳ cách nào. Trong thuật ngữ java JaxRs là giao diện và 4 restlet này, resteasy, jersey, apache cxf là triển khai của giao diện.

Bây giờ hãy nói nếu hiểu biết của tôi là chính xác. Sau đó cho biết làm thế nào họ có liên quan. Hãy giúp tôi . Nếu có thể một lời giải thích bằng hình ảnh sẽ hữu ích hơn.

Trả lời

14

Hiểu biết của bạn về cơ bản là chính xác. JAXB và JAX-RS là cả hai tiêu chuẩn Java Community Process (JCP) với nhiều triển khai.

JAXB - Xác định siêu dữ liệu chuẩn và API thời gian chạy để chuyển đổi đối tượng miền Java sang/từ XML.

JAX-RS - Xác định siêu dữ liệu chuẩn và API thời gian chạy để tạo dịch vụ RESTful. Theo mặc định cho application/xml loại phương tiện JAX-RS sẽ sử dụng JAXB để chuyển đổi các đối tượng thành/từ XML.

Ví dụ

Trong ví dụ sau khi một hoạt động được thực hiện GET thi JAX-RS sẽ trả về một Customer. Một JAXB impl sẽ được sử dụng để chuyển đổi cá thể đó là Customer thành XML mà máy khách thực sự sẽ nhận được.

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

Cảm ơn bạn rất nhiều. Nhưng tôi có 2 câu hỏi. 1) những gì bạn có nghĩa là bởi tuyên bố "Theo mặc định cho các ứng dụng/xml loại phương tiện truyền thông JAX-RS sẽ sử dụng JAXB". Sau đó, điều gì xảy ra với các loại phương tiện khác. 2) những gì bạn nhấn mạnh bởi ví dụ bạn trích dẫn. Vui lòng làm rõ. –

+0

Ya câu hỏi thứ hai của tôi trong bình luận 1 đã bị xóa. Nhưng trên ví dụ bạn nói "JAXB impl sẽ được sử dụng để chuyển đổi cá thể của khách hàng đó thành XML".Mã này có nằm trong nội bộ hay chính nó trong đoạn mã ví dụ? Ví dụ, nếu bạn có thể cho biết số dòng? –

+0

Bạn có thể ghi đè lên xử lý mặc định của 'application/xml' bằng cách cung cấp một tùy chỉnh' MessageBodyReader'/'MessageBodyWriter'. Đối với các loại phương tiện truyền thông khác, nó phụ thuộc. Kiểu phương tiện 'application/json' là phổ biến nhưng JAX-RS không xác định ràng buộc mặc định là gì, các triển khai đã đưa ra các giá trị mặc định riêng. Đây là một ví dụ: http://blog.bdoughan.com/2013/07/oracle-weblogic-1212-now-with.html –