解组后保持亲子关系

时间:2018-02-13 15:53:25

标签: jaxb

以下是我试图解开JAXB的一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<menus>
    <menu>
        <name>main</name>
        <subMenu>
            <name>mainMenu</name>
            <!-- Transfer / Versement -->
            <subMenu>
                <name>transfer</name>
                <label>MENU_TRANSFER</label>
                <icon>call-received</icon>

                <menuItem>
                    <name>record</name>
                    <label>MENU_RECORD</label>
                    <url>/pages/record/search/recordListSearchResult.jsf</url>
                </menuItem>

                <menuItem>
                    <name>transferInput</name>
                    <label>MENU_TRANSFER_OPEN</label>
                    <url>/pages/transfer/open/transferListOpen.jsf</url>
                </menuItem>
        </subMenu>
    </menu>
</menus>

一旦解组,使用java生成的代码,我希望能够检索menuItem的子菜单父级(无需使用循环等)。基本上,我想在MenuItem上生成一个getter getParent返回他的家长。有一个简单的方法吗?

1 个答案:

答案 0 :(得分:2)

解组后,您可以使用Unmarshal Event Callbacks在映射类的实例中接收父对象。要执行此操作,只需添加具有以下签名的方法:

void afterUnmarshal(Unmarshaller unmarshaller, Object parent);

因此,您将在解组后在子子菜单中获取父子菜单。

如果映射的类是模式派生的(例如,您使用XJC编译一些XML模式),则可以使用code injector plugin将代码添加到生成的类中。

我还认为应该有XJC插件来处理父对象(谷歌XJC或JAXB父插件)。