序列化没有jaxb注释的基类

时间:2012-01-24 22:32:12

标签: java xml jaxb

我有一个我编辑的基类,所以我不能添加jaxb注释。 在派生类中,我想序列化一些基类的属性。 我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB 2 (JSR-222)专家组的成员。

如果您无法修改类以对其进行注释,那么您可能对 EclipseLink JAXB(MOXy)中的外部映射文档扩展感兴趣。

<强> oxm.xml

下面是我在博客上的一个示例中指定的元数据的外部映射文档(JSON Binding with EclipseLink MOXy - Twitter Example)。

<?xml version="1.0"?>
<xml-bindings
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
    package-name="blog.json.twitter">
    <java-types>
        <java-type name="SearchResults" xml-accessor-type="FIELD">
            <java-attributes>
                <xml-element java-attribute="completedIn" name="completed_in"/>
            </java-attributes>
        </java-type>
        <java-type name="Result" xml-accessor-type="FIELD">
            <java-attributes>
                <xml-element java-attribute="createdAt" name="created_at">
                    <xml-java-type-adapter value="blog.json.twitter.DateAdapter"/>
                </xml-element>
                <xml-element java-attribute="fromUser" name="from_user"/>
            </java-attributes>
        </java-type>
    </java-types>
</xml-bindings>

<强>演示

使用外部映射文档引导JAXBContext的代码如下所示:

Map<String, Object> properties = new HashMap<String, Object>(1);
properties.put(JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY, "blog/json/twitter/oxm.xml");
JAXBContext jc = JAXBContext.newInstance(new Class[] {SearchResults.class}, properties);

了解更多信息

答案 1 :(得分:0)

这对我有用。在此MyClass中没有使用JAXB注释进行注释。 MyClass是一个典型的java bean类。

       try {
        JAXBContext jc = JAXBContext.newInstance(MyClass.class);
        MyClass cl = new MyClass();
        Marshaller m = jc.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        m.marshal(new JAXBElement<MyClass>(new QName("","MyClass"), MyClass.class, cl), System.out);

    } catch (JAXBException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }