Có một người ở đây thề rằng JAXB là thứ tuyệt vời nhất kể từ khi bánh mì cắt lát. Tôi tò mò muốn xem người dùng Stack Overflow nghĩ trường hợp sử dụng nào dành cho JAXB và điều gì khiến nó trở thành giải pháp tốt hay không tốt cho trường hợp đó.
Có một người ở đây thề rằng JAXB là thứ tuyệt vời nhất kể từ khi bánh mì cắt lát. Tôi tò mò muốn xem người dùng Stack Overflow nghĩ trường hợp sử dụng nào dành cho JAXB và điều gì khiến nó trở thành giải pháp tốt hay không tốt cho trường hợp đó.
Câu trả lời:
Tôi là một fan hâm mộ lớn của JAXB để sử dụng XML. Về cơ bản, nó cung cấp một giải pháp cho vấn đề này (giả sử tôi đã quen với XML, cấu trúc dữ liệu Java và Lược đồ XML):
Làm việc với XML rất khó. Người ta cần một cách để lấy một tệp XML - về cơ bản là một tệp văn bản - và chuyển đổi nó thành một số loại cấu trúc dữ liệu, mà chương trình của bạn sau đó có thể thao tác.
JAXB sẽ lấy một Lược đồ XML mà bạn viết và tạo một tập hợp các lớp tương ứng với lược đồ đó. Các tiện ích JAXB sẽ tạo ra cấu trúc phân cấp dữ liệu để thao tác với XML đó.
Sau đó, JAXB có thể được sử dụng để đọc tệp XML, và sau đó tạo các phiên bản của các lớp được tạo - chứa đầy dữ liệu từ XML của bạn. JAXB cũng làm ngược lại: nhận các lớp java và tạo ra XML tương ứng.
Tôi thích JAXB vì nó dễ sử dụng và đi kèm với Java 1.6 (nếu bạn đang sử dụng 1.5, bạn có thể tải xuống JAXB .jars.) Cách nó tạo ra hệ thống phân cấp lớp rất trực quan và theo kinh nghiệm của tôi, nó hoạt động khá tốt trừu tượng hóa "XML" để tôi có thể tập trung vào "dữ liệu".
Vì vậy, để trả lời câu hỏi của bạn: Tôi hy vọng rằng, đối với các tệp XML nhỏ, JAXB có thể quá mức cần thiết. Nó yêu cầu bạn tạo và duy trì một lược đồ XML và sử dụng "các phương pháp sách giáo khoa chuẩn" để sử dụng các lớp Java cho cấu trúc dữ liệu. (Các lớp chính, các lớp bên trong nhỏ để đại diện cho các "nút" và một hệ thống phân cấp khổng lồ của chúng.) Vì vậy, JAXB có lẽ không phải là tuyệt vời cho một danh sách tuyến tính đơn giản các "tùy chọn" cho một ứng dụng.
Nhưng nếu bạn có một lược đồ XML khá phức tạp và nhiều dữ liệu chứa trong nó, thì JAXB thật tuyệt vời. Trong dự án của mình, tôi đang chuyển đổi một lượng lớn dữ liệu giữa nhị phân (được sử dụng bởi chương trình C) và XML (để con người có thể sử dụng và sửa đổi dữ liệu đó). Lược đồ XML kết quả là không tầm thường (nhiều mức phân cấp, một số trường có thể được lặp lại, những trường khác thì không) vì vậy JAXB rất hữu ích trong việc có thể thao tác điều đó.
Đây là một lý do để không sử dụng nó: hiệu suất bị ảnh hưởng. Có rất nhiều chi phí khi điều phối và không quản lý. Bạn cũng có thể muốn xem xét một API khác cho liên kết XML-Object - chẳng hạn như JiBX: http://jibx.sourceforge.net/
Đó là "ORM cho XML". Hầu hết thường được sử dụng cùng với JAX-WS (và thực sự là các triển khai Mặt trời được phát triển cùng nhau) cho các hệ thống Ngôi sao Tử thần WS.
Tôi sử dụng JAXB tại nơi làm việc mọi lúc và tôi thực sự yêu thích nó. Nó hoàn hảo cho các lược đồ XML phức tạp luôn thay đổi và đặc biệt tốt để truy cập ngẫu nhiên các thẻ trong tệp XML.
Tôi ghét ma cô nhưng tôi mới bắt đầu viết blog và đây thực sự là điều đầu tiên tôi đăng về!
Kiểm tra nó tại đây:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
Với JAXB, bạn có thể tự động tạo các biểu diễn XML cho các đối tượng của mình (sắp xếp) và các biểu diễn đối tượng của XML (giải nén).
Liên quan đến Lược đồ XML, bạn có hai lựa chọn:
Ngoài ra còn có một số thư viện tuần tự hóa XML đơn giản hơn như XStream , Digester hoặc XMLBeans có thể là lựa chọn thay thế.
JAXB rất tuyệt nếu bạn phải viết mã cho một số đặc tả XML bên ngoài được định nghĩa là một lược đồ XML ( xsd
).
Ví dụ: bạn có một ứng dụng giao dịch và bạn phải báo cáo các giao dịch cho Ứng dụng Báo cáo Thương mại Uber Lame và họ đã cấp cho bạn ultra.xsd
để tiếp tục. Sử dụng $JAVA_HOME/bin/xjc
trình biên dịch để biến XML thành một loạt các lớp Java (ví dụ UltraTrade
).
Sau đó, bạn có thể chỉ cần viết một lớp bộ điều hợp đơn giản để chuyển đổi các đối tượng thương mại của bạn sang UltraTrades
và sử dụng JAXB
để điều phối dữ liệu sang Ultra-Corp. Nhiều dễ dàng hơn rối tung về chuyển đổi ngành nghề của bạn sang định dạng XML của họ.
Tất cả tan vỡ là khi Ultra-Corp không thực sự tuân theo thông số kỹ thuật của riêng họ, và giao dịch price
mà họ xsd:float
thực hiện như một thực tế nên được thể hiện dưới dạng a double
!
Tại sao chúng ta cần JAXB? Các thành phần từ xa (được viết bằng Java) của các dịch vụ web sử dụng XML như một phương tiện để trao đổi các thông điệp giữa nhau. Tại sao lại là XML? Bởi vì XML được coi là tùy chọn có trọng lượng nhẹ để trao đổi thông điệp trên Mạng có tài nguyên hạn chế. Vì vậy, thường chúng ta cần chuyển đổi các tài liệu XML này thành các đối tượng và ngược lại. Ví dụ: Nhân viên POJO Java đơn giản có thể được sử dụng để gửi dữ liệu Nhân viên đến thành phần từ xa (cũng là một chương trình Java).
class Employee{
String name;
String dept;
....
}
Pojo này nên được chuyển đổi (Marshall) sang tài liệu XML như sau:
<Employee>
<Name>...</Name>
<Department>...</Department>
</Employee>
Và tại thành phần từ xa, quay lại đối tượng Java từ tài liệu XML (Un-Marshall).
JAXB là gì?
JAXB là một thư viện hoặc một công cụ để thực hiện thao tác Marshalling và UnMarshalling này. Nó giúp bạn thoát khỏi cơn đau đầu này, đơn giản như vậy.
Bạn cũng có thể kiểm tra JIBX. Nó cũng là một chất kết dính dữ liệu xml rất tốt, cũng chuyên dụng trong OTA (Open Travel Alliance) và được hỗ trợ bởi các máy chủ AXIS2. Nếu bạn đang tìm kiếm hiệu suất và khả năng tương thích, bạn có thể kiểm tra:
JAXB cung cấp hiệu suất được cải thiện thông qua tối ưu hóa sắp xếp mặc định. JAXB định nghĩa một API lập trình viên để đọc và ghi các đối tượng Java đến và đi từ các tài liệu XML, do đó đơn giản hóa việc đọc và ghi XML qua Java.