在 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
.
时将其取回
我有一个 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
.