Jer*_*emy 9 java visitor simple-framework
我正在使用SimpleXML框架反序列化后端答案.我对元素做了一些假设.有些元素不符合这些要求.例如,我希望一个元素有孩子<ID>和<face>.如果不允许我的用户查看特定元素,我可能会得到这样的答案:
<list>
<voucher type="hiddenobject">
<face>foo</face>
</voucher>
<voucher type="object">
<ID>42</ID>
<face>bar</face>
</voucher>
</list>
Run Code Online (Sandbox Code Playgroud)
这给了我以下反序列化类的ValueRequiredException:
@Root
class Voucher {
@Element(name="ID")
private String id;
@Element
private String face;
}
Run Code Online (Sandbox Code Playgroud)
我想用类型忽略这些对象hiddenobject.我了解了VisitorStrategy并实现了Visitor这样一个简单:
private static final class HiddenObjectVisitor implements Visitor {
@Override
public void read(Type type, NodeMap<InputNode> node) throws Exception {
String nodeType = node.getNode().getAttribute("type").getValue();
if (nodeType != null && nodeType.equals("hiddenobject")) {
Log.d(TAG, "skipping node " + node);
node.getNode().skip();
}
}
@Override
public void write(Type type, NodeMap<OutputNode> node) throws Exception {
// stub
}
}
Run Code Online (Sandbox Code Playgroud)
并将此添加Visitor到VisitorStrategy
VisitorStrategy strategy = new VisitorStrategy(new HiddenObjectVisitor());
Run Code Online (Sandbox Code Playgroud)
期望在反序列化期间这会跳过节点.我确实得到了日志条目,表明将跳过该节点.无论如何,VisitorStrategy似乎继续解析要跳过的节点,导致a ValueRequiredException.
如何忽略具有给定属性的节点?是否可以VisitorStrategy用于此任务?
您可以将建议的方法Raniz与您的方法结合起来HiddenObjectVisitor.注释id与required=false避免ValueRequiredException,然后用你HiddenObjectVisitor跳过一些的Voucher反序列化过程中的对象.
根据您显示id的XML,XML文件中不需要,这就是required=false指示的内容.但是您暗示id在反序列化对象中需要这样做,因此您可以在反序列化时丢弃无效对象.