【问题标题】:JAXB marshalling for function with arguments带参数的函数的 JAXB 编组
【发布时间】:2014-04-21 17:45:28
【问题描述】:

是否可以使用 JAXB 从包含参数的函数创建 XML 属性?我想做这样的事情:

@XmlRootElement
public class App {

    @XmlAttribute
    public boolean isOwned( User user ) {
        return user.ownsApp( getId( ) );
    }

}

在将 App 类编组为 XML 时,如何将 User 参数放入此函数调用中?我不关心解组。

【问题讨论】:

    标签: java xml jaxb marshalling xml-attribute


    【解决方案1】:

    JAXB (JSR-222) 将注释的使用限制为字段(即foo)或属性(即bar)。根据您的问题,您不能在任意方法上使用它。

    @XmlRootElement
    public class App {
    
        @XmlAttribute  // VALID
        private boolean foo;
    
        private boolean bar;
    
        @XmlAttribute // VALID
        public boolean isBar() {
            return bar;
        }
    
        @XmlAttribute  // INVALID
        public boolean isOwned( User user ) {
            return user.ownsApp( getId( ) );
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      Blaise Doughan 的说法是正确的,但我认为你可以用一种肮脏的方式来解决它

      @XmlRootElement
      @XmlAccessorType(XmlAccessType.FIELD)
      public class App {
          @XmlTransient
          User u;
      
          @XmlAttribute  // VALID
          private boolean foo;
      
          private boolean bar;
          public App(SomeType x, User u, ...){
              this.u = u;
          }
      
      
          @XmlAttribute 
          public boolean isBar() {
              return bar;
          }
      
          @XmlAttribute  
          public boolean isOwned() {
              return u.ownsApp( getId( ) );
          }
      
      }
      

      您使用@XmlAccessorType 指定您希望它返回一些特定值,并且您省略使用@XmlTransient 打印整个用户,但实际上isOwned() 应该可以工作...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-05
        • 2017-04-28
        • 2014-06-29
        • 1970-01-01
        相关资源
        最近更新 更多