JAXB Generic XmlAdapter实现

时间:2015-01-05 13:15:26

标签: java xml generics jaxb

这个问题延续了我之前的帖子:here

现在我想使用通用的XmlAdapter,因为我需要对不同类型的值应用相同的工作。我可以为每种类型创建一个类,但这不是我的问题的目的,我想使这个通用。所以这就是我所做的:

通用适配器类

public class GenericXMLAdapter<T> extends XmlAdapter<GenericXMLAdapter.AdaptedValue<T>, T>{
  public static class AdaptedValue<T> {
        @XmlAttribute
        public T code;
  }

  @Override
  public T unmarshal(AdaptedValue<T> v) throws Exception {
        return v.code;
  }

  @Override
  public AdaptedValue<T> marshal(T v) throws Exception {
        AdaptedValue<T> adaptedValue = new AdaptedValue<T>();
        adaptedValue.code = v;
        return adaptedValue;
  }

}

我的临时类生成正确的适配器

public final class DefinedXMLAdapter {
      public static class BooleanAdapter extends GenericXMLAdapter<Boolean> {};
}

编组的示例

  @XmlElement(name = "theBoolean")
  @XmlJavaTypeAdapter(DefinedXMLAdapter.BooleanAdapter.class)
  protected Boolean myBoolean = false;

当我执行我的代码时,我得到一个奇怪的错误,我无法理解:

Exception in thread "main" java.lang.NullPointerException
  at com.sun.xml.internal.bind.v2.runtime.reflect.TransducedAccessor.get(TransducedAccessor.java:154)
  ...

有人可以向我解释我的代码有什么问题,以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我终于通过使用MOXy作为JAXB实现来解决我的问题。 谢谢你的时间,祝你有个美好的一天!