【问题标题】:Bean-To-XML annotations: how to process nested structureBean-To-XML 注解:如何处理嵌套结构
【发布时间】:2010-02-11 08:22:53
【问题描述】:

对于 web 服务中的 bean->xml 转换,我们使用 CXF 的 Aegis(据我了解,它与 jaxb 兼容)。

这是我的类型:

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

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

我需要t.t1 字段在 XML 中与 abC 中处于同一级别(从 xml 恢复的 bean 应该是这样的:

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

(客户端代码只对结构T中的字段t1感兴趣)。 谢谢。

【问题讨论】:

    标签: java xml jaxb cxf aegis


    【解决方案1】:

    您可以将getT1()setT1(int) 添加到C 并生成getT() @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
        }
      }
    }
    

    【讨论】:

    • 您的解决方案可能有效,但我不想在我的课程中添加额外的公共方法。如果其他开发人员看到读取/设置一个变量 c.getT().setT1(1) 和 c.setT1() 的两种方式,他们可能会感到困惑。当然,我可以将 c.setT1() 标记为已弃用或添加 cmets,但如果可能,我希望避免使用此类代码。
    • @dbf 您也可以将这些方法设为私有。不过,这需要使用 @XmlElement 显式注释它们。
    • @dbf 另一种可能性是使用 @XmlJavaTypeAdapter 并将 C 替换为包含所需属性的另一个对象(可以是扩展或包装 C 的类)。
    • sfussenegger XmlJavaTypeAdapter 很好,但是我有一个问题:在 webservice 方法调用期间没有调用它。 Aegis 映射是否支持@XmlJavaTypeAdapter 注解?
    • 抱歉,不能帮到你
    猜你喜欢
    • 2014-10-16
    • 2018-04-17
    • 1970-01-01
    • 2023-03-06
    • 2013-11-23
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    相关资源
    最近更新 更多