2010-09-29 22 views
15

Trong Java, chúng tôi làm việc rất nhiều với JAXB2. Object < - ánh xạ> XML được định nghĩa là chú thích trong các lớp Java:Có một API JavaScript để liên kết XML - tương tự với JAXB cho Java không?

@XmlRootElement(name="usertask", namespace="urn:test") 
public class UserTask 
{ 
    @XmlElement(namespace="urn:test") 
    public String getAssignee() { ... } 

    public void setAssignee(String assignee) { ... } 
} 

JAXB runtime có thể đọc các chú thích và tạo unmarshaller để phân tích XML vào một trường hợp đối tượng hoặc marshall một đối tượng vào XML.

JAXB gửi một trình biên dịch lược đồ (XJC) có thể tạo ra các lớp chú thích từ các lược đồ XML, đây là một tính năng tuyệt vời khác.


Gần đây chúng tôi đã làm việc rất nhiều với JavaScript phía máy khách. Chúng ta cũng cần xử lý XML ở đó. Ví dụ, chúng ta cần phân tích các tài liệu WPS như this one. Các tài liệu này cũng tuân thủ different XML schemas (đây là the WPS 1.0.0 schema đối với XML mẫu). Nó sẽ là tuyệt vời để làm việc với các đối tượng JavaScript thay vì XML, điều này tiết kiệm rất nhiều nỗ lực thực sự. Trong một số trường hợp, chúng tôi có thể sử dụng các giải pháp dựa trên JSON như DWR, nhưng trong nhiều trường hợp, chúng tôi phải xử lý XML ở phía máy khách.

Câu hỏi của tôi là:

Có một số tương tự của JAXB cho JavaScript?

Một số công cụ sẽ biên dịch Lược đồ XML thành một số ánh xạ đối tượng XML và cung cấp thời gian chạy để chuyển đổi giữa các đối tượng XML và JavaScript?

tôi có thể dễ dàng tưởng tượng ánh xạ được tạo ra trong một hình thức như:

UserTask = new JSXML.XmlRootElement({ 
    name: "usertask", 
    namespace: "urn:test", 
    properties: [ 
    { 
     assignee: new JSXML.XmlElement({ 
     name: "assignee", 
     namespace: "urn:test", 
     type: new JSXML.XSD.String() 
     }) 
    } 
    ] 
}); 

Và đây nên được khá đủ để xây dựng unmarshaller hoặc marshaller.

Trả lời

0

Hỗ trợ JSON cho JAXB như thế nào?Tái sử dụng các lớp mô hình chú thích JAXB hiện tại của bạn nhưng xuất ra JSON từ các điểm cuối REST của bạn.

Phiên bản hiện tại của Jersey hỗ trợ điều này (qua mô-đun jersey-json) với JSONJAXBContext.

Bạn cũng có thể thử hỗ trợ JAXBJAX-RS của .

+1

Hỗ trợ JSON cho JAXB chính xác là những gì tôi cần. Nhưng ở phía máy khách, trong JavaScript thuần túy. Jersey và Co. có thể được sử dụng ở phía máy chủ. Ngay bây giờ, chúng tôi có một giải pháp phía máy chủ dựa trên DWR hoạt động tốt. Nhưng tôi cần giải pháp chỉ dành cho khách hàng (proxy phía máy chủ vẫn ổn). – lexicore

2

Những việc bạn có thể làm là thêm định nghĩa biểu định kiểu chung: XSLT vào XML của bạn để chuyển đổi chúng thành JSON. ví dụ: http://code.google.com/p/xml2json-xslt/

Xử lý XML bằng Javascript là một nỗi đau so với JSON, đặc biệt là trình duyệt chéo.
Biểu định kiểu sẽ thêm một chi phí nhỏ vào yêu cầu của bạn. Ở phía máy chủ hoặc phía máy khách, bạn có thể chọn, nhưng bạn phải so sánh điều này với độ phức tạp của mã và tốc độ phân tích cú pháp và đọc XML với Javascript trên các trình duyệt khác nhau.

+1

Giải pháp XSLT không phù hợp với một số lý do. Trước tiên, chúng tôi cần xử lý phía máy khách. Mang bộ xử lý XSLT để chuyển đổi từ XML sang JSON là quá nặng, không thể chấp nhận được. Tôi nghĩ XSLT không phải là sự lựa chọn tốt nhất của công nghệ ở đây anyway: những gì có thể được thực hiện với một XSLT 7K có thể được thực hiện với JavaScript 3K - bạn sẽ không cần một bộ xử lý XSLT ở phía máy khách. – lexicore

+1

Thứ hai, một XSLT giống như một cái mà bạn đăng liên kết đến không phải là lược đồ cụ thể. Ví dụ: nếu bạn có phần tử foo, bạn sẽ thực sự không biết liệu đây có phải là một mục duy nhất: 'foo' hay một mục mảng: ['foo']. Có năm 2010 bạn không biết nếu đó là một năm hoặc một số và như vậy. XML <-> ánh xạ đối tượng phải được bắt nguồn từ lược đồ ở đây để cung cấp thông tin về cấu trúc và kiểu thích hợp mà một cá thể XML không cung cấp. – lexicore

+0

Thêm một tiêu đề như '' Trong XML của bạn được hiểu bởi tất cả các trình duyệt mà không thêm bất kỳ thứ gì, hoặc bạn có thể làm cho nó phía máy chủ (nginx là thực sự tốt ở đó). Việc chuyển sang JSON hàm ý một số sự cân bằng, đặc biệt là về các lược đồ, các loại v.v ... Nhưng đối với tôi, nó rất đáng để mất. – Mic

3

tôi đã không cố gắng này, vì vậy tôi không chắc chắn nếu nó sẽ làm việc, nhưng có bạn đã cân nhắc sử dụng GWT để bạn vẫn có thể sử dụng JAXB và viết toàn bộ ứng dụng dưới dạng ứng dụng java? Tôi không chắc liệu GWT có hỗ trợ JAXB (có lẽ không), nhưng có thể có một giải pháp thay thế cho phân tích xml mà nó sẽ hỗ trợ. Nếu công trình này hoạt động, bạn có thể tự động hóa việc tạo mô hình javascript của mình thông qua gwt, sau đó đưa chúng vào ứng dụng của bạn. Vâng, đó là nhiều hơn nữa cruft hơn bạn muốn, nhưng nhịp đập phải viết nó từ đầu.

Các vấn đề liên quan