我正在尝试实现一个XmlAdapter来修改某些对象属性的编组/解组.特别是,我尝试了NullStringAdapter这里描述的:
该目标是将NullStringAdapter空值编组为空字符串,反之亦然.
与上面描述的示例和我的代码的唯一区别是,我想将适配器应用于元素,而不是属性,所以我拥有的是:
@XmlElement
@XmlJavaTypeAdapter(NullStringAdapter.class)
public String getSomeValue() {
return someValue; //someValue could be null, in that case the adapter should marshall it as an empty string
}
Run Code Online (Sandbox Code Playgroud)
但是,经过一些调试后,我意识到在从Java到XML的编组过程中从未调用过Adapter方法!当XmlElement值为null时,会发生这种情况.当此值不为null时,将按预期调用适配器方法.
谢谢你的帮助!.
注意: 我是EclipseLink JAXB(MOXy)的负责人,也是JAXB 2(JSR-222)专家组的成员.
但是,经过一些调试后,我意识到在从Java到XML的编组过程中从未调用过Adapter方法!当XmlElement值为null时,会发生这种情况.当此值不为null时,将按预期调用适配器方法.
此行为因JAXB的实现而异.XmlAdapter当字段/属性为null时,JAXB引用实现不会调用marshal方法,但MOXy将会.
JAXB规范说的内容(第5.5.1节简单属性)
get或is方法返回前一小节中指定的属性值.如果返回null,则认为该属性不在其表示的XML内容中.
对该陈述的MOXy解释是,字段/属性的值实际上是它经过的值XmlAdapter.这对于支持Sergio正在寻找的行为是必要的.
| 归档时间: |
|
| 查看次数: |
5844 次 |
| 最近记录: |