【问题标题】: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() 应该可以工作...