2011-07-22 13 views
12

çok ortak bir alan var JAXB açıklamalı sınıfları bir grup var, bu yüzden Marshall biri Foo veya Bar I şikayetçi bir IllegalAnnotationException olsun zaman ben Şimdi bu"PropOrder" açıklamasında bir JAXB mapped bean için miras alınan özellikleri listeleyebilir miyim/listeleyebilir miyim?

public class Base { 
    protected SomeType commonField; 
} 

@XmlRootElement(name = "foo") @XmlType(propOrder = { "commonField", "fooField" }) 
public class Foo extends Base { 
    private SomeOtherType fooField; 
} 

@XmlRootElement(name = "bar") @XmlType(propOrder = { "commonField", "barField" }) 
public class Bar extends Base { 
    private SomeOtherType barField; 
} 

gibi bir süper sınıfın o alanı taşındı commonField hakkında propOrder listeleniyor, ancak sınıfta mevcut değil. propOrder ek açıklamadan çıkartmak her şey yolunda gidiyor, ama ben tüm haritalanmış alanları listelemem gerekiyordu. Neyi kaçırıyorum?

cevap

23

Devralınan sınıftaki alanlar/özellikler, her zaman alt sınıflardaki alanlar/özelliklerden önce görünür. Bu, varsayılan olarak, bunları çocuk türünde propOrder belirtemeyeceğiniz anlamına gelir. Ancak, üst sınıfı @XmlTransient olarak işaretlerseniz, alanlar/özellikler alt sınıflara ait olarak kabul edilir ve propOrder'a dahil edilebilir.

+0

farkında olun ki üst sınıfın özel uygulama detaylarına alt sınıf bu çiftler ek açıklamadır. "PropOrder" i değiştirmeden üst sınıftaki bir alan ismini kayıt altına almak, alt sınıfın serileştirilmesini kıracaktır. Böylece süper sınıfa seri hale getirilmiş bir alan ekleyecek. Ayrıca, propOrder'deki adların @XmlElement ek açıklamaları tarafından sağlanan adlar olmadığını, bunun yerine Java alanlarının veya özelliklerinin tanımlayıcılarını olduğunu unutmayın. [Bu cevap bugün bana çok yardımcı oldu.] –

İlgili konular