2010-02-11 34 views
1

对于Web服务中的bean-> xml转换,我们使用CXF中的Aegis(据我所知它与jaxb兼容)。Bean-To-XML注解:如何处理嵌套结构

这是我喜欢的类型:

class C{ 
private int a; 
private int b; 
private T t; 
... 
} 

class T{ 
private int t1; 
private int t2; 
} 

我需要t.t1场是在XML中C(豆从XML还原同一水平ab应该是这样的:

class C{ 
private int a; 
private int b; 
private int t1 
} 

(客户代码仅对来自结构T的字段t1感兴趣) 谢谢。

回答

1

您可以添加getT1()setT1(int)CgetT()@XmlTransient

class C { 
    // snip 

    /** 
    * JAXB only 
    */ 
    @SuppressWarnings("unused") 
    @XmlElement 
    private void setT1(int t1) { 
    if(t != null) { 
     t.setT1(t1); 
    } else { 
     // TODO 
    } 
    } 

    /** 
    * JAXB only 
    */ 
    @SuppressWarnings("unused") 
    private int getT1() { 
    if(t != null) { 
     return t.getT1(t1); 
    } else { 
     // TODO 
    } 
    } 
} 
+0

您的解决方案可能是工作,但我不想额外的公共方法添加到我的课。如果他们看到两种读取/设置变量的方法 c.getT(),setT1(1)和c.setT1(),可能会混淆其他开发人员。当然,我可以将c.setT1()标记为已弃用或添加注释,但如果可能的话,我想避免使用此类代码。 – dbf 2010-02-11 08:52:20

+1

@dbf你也可以使这些方法是私人的。这需要使用'@ XmlElement'明确注释它们。 – sfussenegger 2010-02-11 09:22:05

+0

@dbf另一种可能性是使用'@ XmlJavaTypeAdapter'并用另一个包含所需属性的对象(可以是扩展或封装'C'的类)替换'C'。 – sfussenegger 2010-02-11 09:28:04