2011-08-03 12 views
2

私は次のような階層が午前:MOXY JAXB @XmlIDと継承

:私は、次のテストコードを使用しています

@XmlRootElement 
@XmlAccessorType(XmlAccessType.NONE) 
public class Baz { 
    private List<Small> smalls = new LinkedList<Small>(); 

    private Small small; 
    private Big big; 

    @XmlIDREF 
    public Small getSmall() { 
     return small; 
    } 

    public void setSmall(Small small) { 
     this.small = small; 
    } 

    @XmlIDREF 
    public Big getBig() { 
     return big; 
    } 

    public void setBig(Big big) { 
     this.big = big; 
    } 

    @XmlElementWrapper(name = "smalls") 
    @XmlElement(name = "small") 
    public List<Small> getSmalls() { 
     return smalls; 
    } 

    public void setSmalls(List<Small> smalls) { 
     this.smalls = smalls; 
    } 
} 

:私はクラスバズをマーシャリングしようとしています

public class Small { 
    private String xmlId; 

    @XmlID 
    @XmlAttribute 
    public String getXmlId() { 
     if (xmlId == null) 
      xmlId = "small" + new Random().nextInt(); 
     return xmlId; 
    } 

    public void setXmlId(String id) { 
     this.xmlId = id; 
    } 
} 

public class Big extends Small { 
    // Code 
} 

public class Test2 { 
    public static void main(String[] args) throws Exception { 
     Small s1 = new Small(); 
     Small s2 = new Small(); 
     Big b1 = new Big(); 

     List<Small> smalls = new LinkedList<Small>(); 
     smalls.add(s1); 
     smalls.add(s2); 
     smalls.add(b1); 

     Baz baz = new Baz(); 
     baz.setSmalls(smalls); 
     baz.setSmall(s2); 
     baz.setBig(b1); 

     JAXBContext jc = JAXBContext.newInstance(Baz.class); 
     Marshaller m = jc.createMarshaller(); 
     m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     m.marshal(baz, System.out); 
    } 
} 

残念ながらマーシャルを実行するとき、私は以下の例外に直面しています:

Exception in thread "main" javax.xml.bind.JAXBException: 
Exception Description: Invalid XmlIDREF on property [big]. Class [test.moxy.Big] is required to have a property annotated with XmlID. 

私は、XmlID注釈がBigクラスによって継承されると予想します。私はマーシャルの問題を修正するBigクラスの "別の" @XmlIDアノテーションを追加しようとしました。しかし、XMLスキーマを生成するときに別の問題が発生します。これには、2つのID属性が含まれますが、これは許可されません。

何か間違っていますか?

答えて