在 JaxB 中使用父引用加载 类

loading classes with parent reference in JaxB

我有一个 class 看起来像这样:

public class Policy{
    Key key;
    Permissions permissions;
    Policy parent;
    ...
}

我还有一个政策管理员:

public PolicyManager{
    Map<Key, Policy> policyMap;

    public Policy getPolicy(Key key){
         return policyMap.get(key);
    }

如果一个策略有父级,它会继承父级的权限。我不承诺在每个策略中实际存储对父对象的引用,但至少我需要某种方法来查找父对象以继承它的权限,而不管最终对象的结构是什么。

我不确定在使用 JaxB 加载策略时如何执行此操作。我知道我可能需要使用 XmlAdpter。但是,即使使用适配器,我也不知道如何查找父策略。我不知道如何将 policyManager inject/pass 放入任何 Jaxb 解组对象中,所以即使我编写自己的解组器,我也没有办法查找父策略。

我现在知道的唯一解决方案是让 jaxb return 到 PolicyManager 一些中间对象,然后 PolicyManager 从那个未编组的对象构建一个实际的策略。那么这个有'cleaner'解决方案吗?

javax.xml.bind.Unmarshaller 有一个 Listener 属性 允许你监听 before/after 对象解组。
每次您在 Listener.afterUnmarshal() 中找到一个权限时,将对象存储在某处,并在您找到 Policy.

时将其取回