Tôi có một hệ thống phân cấp phức tạp của các giao diện Java mà tôi muốn sắp xếp (và không nhất thiết là không đối sánh) với JAXB. Các giao diện này đại diện cho các đối tượng sẽ được trả về từ một API REST JAX-RS như XML, JSON, YAML, v.v. (Tôi đang sử dụng RestEasy, có thể sắp xếp các loại chú thích JAXB theo các định dạng khác với XML.)JAXB marshalling hoàn toàn từ các giao diện
vấn đề có vẻ là JAXB về cơ bản là theo định hướng lớp. Tôi đã thực hiện rất nhiều nghiên cứu về những khó khăn với JAXB và giao diện, các giải pháp gần nhất là MOXy JAXB - Map Interfaces to XML và JAXB and Interface Fronted Models. Tuy nhiên, tôi có hai vấn đề chính: a) Tôi muốn chú thích/làm việc về mặt giao diện, không phải các lớp cụ thể (trong đó sẽ có nhiều triển khai và có chứa trạng thái quan trọng khác không được sắp xếp), và b) tôi có nhiều cấp độ thừa kế giao diện. Dưới đây là một ví dụ về các giao diện, trừ đi bất kỳ JAXB chú thích sao cho đến nay:
interface Uuided {
UUID getId();
}
interface Named {
String getName();
}
interface Component extends Uuided, Named {
Map<String, ComponentAttribute> getAttributes();
}
interface Attribute extends Named {
Type getType();
Object getValue();
}
interface ComponentAttribute extends Attribute {
Component getDeclaringComponent();
}
Lý tưởng nhất, điều này sẽ tạo ra một cái gì đó như:
<component id="xxx" name="thing">
<attributes>
<componentAttribute name="color">
<type><stringType/></type>
<value>green</value>
<declaringComponent idref="xxx"/>
</componentAttribute>
</attributes>
</component>
Rõ ràng, trong trừu tượng, điều này dẫn đến các vấn đề như xác định nhất giao diện có chú thích bắt nguồn, trong đó về lý thuyết có thể có nhiều hơn một. Tuy nhiên, trong trường hợp của tôi, tôi tin rằng các lớp cụ thể chỉ thực hiện một giao diện duy nhất cần được sắp xếp. Unmarshaling là không cần thiết, vì tôi có các lớp riêng biệt xác định các thuộc tính upsert.
Vì vậy, câu hỏi của tôi là, điều này thậm chí có thể xử lý được với JAXB hay không, và nếu có thì làm cách nào? Ngay cả khi tôi phải rất rõ ràng trong việc xác định các ràng buộc, bộ điều hợp, v.v., tôi muốn làm việc trong khung công tác JAXB để có được lợi ích của tất cả các nhà cung cấp không phải XML trong RestEasy.
Thảo luận liên quan: http://blog.bdoughan.com/2010/07/moxy-jaxb-map-interfaces-to-xml.html?showComment=1331064265196#c8558952364670027314 –
Bạn sẽ gặp sự cố với chú thích giao diện với JAXB , xem [http://stackoverflow.com/questions/4745798/why-java-classes-do-not-inherit-annotations-from-implemented-interfaces](http://stackoverflow.com/questions/4745798/why- java-classes-do-not-inherit-annotations-từ-triển khai-giao diện) –