我之前使用的是Sun的JAXB RI,但遇到了一个错误,我无法使用自定义编组器来编组空字符串。
我现在已经切换到MOXy以避免这个问题,但我发现,至少开箱即用,MOXy不处理私有XmlAdapter。相反,它会抛出IllegalAccessException。请参阅下文,了解复制此示例的示例代码。
有没有办法说服MOXy使用私有XmlAdapter,还是我坚持使用公开的?我当然会仔细阅读文档,并尝试向Google寻求解决方案,但没有任何事情发生在我身上。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlJavaTypeAdapter(StringField.StringFieldAdapter.class)
public class StringField {
private static final long serialVersionUID = 1L;
@XmlValue
private String value;
public boolean isSet() {
return value != null;
}
public void reset() {
value = null;
}
public String get() {
return value;
}
public void set(String value) {
this.value = value;
}
// N.B - 'non-public' class works with RI, but not with MOXy
private static class StringFieldAdapter extends XmlAdapter<String, StringField> {
@Override
public StringField unmarshal(String v) throws Exception {
StringField field = new StringField();
if (v != null) {
field.set(v);
}
return field;
}
@Override
public String marshal(StringField v) throws Exception {
if (v != null && v.isSet()) {
return v.get();
}
else {
return null; // Switched to MOXy because this doesn't work in the RI
}
}
}
}
答案 0 :(得分:0)
我能够重现您所看到的错误。您可以使用以下错误跟踪我们在此问题上的进展:
解决方法强>
作为一种解决方法,您可以将StringFieldAdapter
课程公开。
public static class StringFieldAdapter extends XmlAdapter<String, StringField> {