【发布时间】:2012-10-19 04:44:20
【问题描述】:
为 Java 类添加 JAX-B Java 注释时 - 如果我有一个父 Class Entry,有两个孩子,Book 和 JournalArticle ,
我会为所有三个类添加这些注释吗:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
即:
@XmlSeeAlso({au.com.library.Book.class, au.com.library.JournalArticle.class})
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public abstract class Entry implements Serializable{
private static final long serialVersionUID = -1895155325179947581L;
@XmlElement(name="title")
protected String title;
@XmlElement(name="author")
protected String author;
@XmlElement(name="year")
protected int year;
和
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Book extends Entry {
@XmlElement(name="edition")
private String edition;
@XmlElement(name="publisher")
private String publisher;
@XmlElement(name="placeOfPublication")
private String placeOfPub;
和
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class JournalArticle extends Entry {
@XmlElement(name="journalTitle")
private String journalTitle;
@XmlElement(name="volume")
private String volume;
@XmlElement(name="issue")
private String issue;
@XmlElement(name="pageNumbers")
private String pgNumbers;
【问题讨论】:
-
只有当这些类将被 JAX-B 进程编组/解组时,您才应该添加注释。请记住,WS 发送/检索父类或子类是不同的。它们将被视为不同的类。
-
@Luiggi Mendoza - 我希望它们都被视为“条目”类型。我正在制作这些 Entry 对象的列表,当我添加到列表中时,我首先检查该对象是否存在,并且仅在列表中不存在该对象时添加(使用 List().contains() 方法) - 但它不断重新添加相同的项目 - 当我调试时,当它检查对象是否已经存在时(当我添加已经在列表中具有相同属性的 SAME Book() 对象时)它给出了新书与现有 Book 对象不同的 ID 号(具有完全相同的属性)。
-
请注意,由 JAX-B 编组/解组的类不能有任何业务逻辑方法(即
equals方法)。当列表被解组(在消费者或提供者端)时,您将获得一个全新的元素(与您发送的元素不同)。对于您的情况,我会在方法中使用自定义Comparator<Entry>而不是List#contains。