我使用EclipseLink 2.5.2可以正常使用此代码,但是转移到2.6.0会破坏XmlValue
注释:
属性或字段值不能使用XmlValue注释,因为它是另一个XML绑定类的子类。
基类看起来像这样:
public abstract class Baseclass {
@XmlAttribute
private String baseValue;
// ...
}
两个子类中的一个(复合模式,B类可以有一个BaseClass元素列表):
@XmlRootElement(name = "A")
public class A extends BaseClass {
@XmlValue
private String aValue;
}
用法:
public class Root {
@XmlElements({
@XmlElement(class = A.class),
@XmlElement(class = B.class)
})
private BaseClass object;
}
不幸的是,类布局无法更改,因为它是JPA持久化到数据库。我试图用XmlJavaTypeAdapter
包裹A和B类但没有成功
是否可以像以前一样使用EL 2.6或通过适配器类?
答案 0 :(得分:3)
我设法使用XmlAdapter解决了这个问题。
在子类中替换XmlValue注释:
@XmlPath(".")
@XmlJavaTypeAdapter(AClassAdapter.class)
private String aValue;
适配器实现:
public class AClassAdapter extends XmlAdapter<AdaptedValue, String> {
public static class AdaptedValue {
@XmlValue
public String value;
public AdaptedValue() {
}
public AdaptedValue(String value) {
this.value = value;
}
}
@Override
public String unmarshal(AdaptedValue v) throws Exception {
return v.value;
}
@Override
public AdaptedValue marshal(String v) throws Exception {
return new AdaptedValue(v);
}
}
XmlPath(".")
成功了。没有它,编组的XML仍然具有aValue
包含在<aValue>
个节点中的值。
答案 1 :(得分:0)
就我而言,解决方案是按照此处的建议添加@XmlValueExtension(除了@XmlValue之外):https://bugs.eclipse.org/bugs/show_bug.cgi?id=461990