JAXB使用MOXy-如何重写属性序列化行为?

JAXB使用MOXy-如何重写属性序列化行为?,jaxb,moxy,Jaxb,Moxy,我有两节课 class First{ private Date date; public Date getDate(){ return date; } ... } 及 其中DateAdapter只将日期转换为Long和back。 我正在序列化第二个类的一个实例,似乎DateAdapter被忽略了。我的意思是我得到了字符串“2013-05-22T13:32:40.664”,而不是它的长表示形式 如果我将@XmlJa

我有两节课

    class First{
      private Date date;

      public Date getDate(){
        return date;
      }
      ...
    }

其中DateAdapter只将日期转换为Long和back。
我正在序列化第二个类的一个实例,似乎DateAdapter被忽略了。我的意思是我得到了字符串“2013-05-22T13:32:40.664”,而不是它的长表示形式

如果我将@XmlJavaTypeAdapter注释移动到第一个类,它可以正常工作,但我的问题是第一个类不能修改,这基本上就是我创建第二个包装类的原因

如何识别XmlJavaTypeAdapter?

您可以使用的外部绑定文件为无法修改的类提供元数据:

oxm.xml


演示

然后,可以使用指定元数据位置的属性引导
JAXBContext

import java.util.*;
导入javax.xml.bind.JAXBContext;
导入org.eclipse.persistence.jaxb.JAXBContextProperties;
公开课演示{
公共静态void main(字符串[]args)引发异常{
映射属性=新的HashMap();
put(JAXBContextProperties.OXM_METADATA_SOURCE,“com/example/foo/OXM.xml”);
JAXBContext jc=JAXBContext.newInstance(新类[]{First.Class,Second.Class},属性);
}
}
了解更多信息

您可以使用的外部绑定文件为无法修改的类提供元数据:

oxm.xml


演示

然后,可以使用指定元数据位置的属性引导
JAXBContext

import java.util.*;
导入javax.xml.bind.JAXBContext;
导入org.eclipse.persistence.jaxb.JAXBContextProperties;
公开课演示{
公共静态void main(字符串[]args)引发异常{
映射属性=新的HashMap();
put(JAXBContextProperties.OXM_METADATA_SOURCE,“com/example/foo/OXM.xml”);
JAXBContext jc=JAXBContext.newInstance(新类[]{First.Class,Second.Class},属性);
}
}
了解更多信息

class Second extends First{
    @XmlAttribute
    @XmlJavaTypeAdapter(value = DateAdapter.class, type = Date.class)
    public Date getDate() {
        return super.getDate();
    }
}