我正在使用 Java 的 SimpleXML 库。目前,我正在尝试使用 @Convert 注释反序列化节点。我重写了 Converter 接口中的 read() 方法,它具有以下原型:
Converter.read(InputNode node)
在 read() 方法中,我迭代子节点并反序列化它们。但是,一些子节点非常复杂,我希望它们使用当前上下文以正常方式反序列化。我认为可以使用 Traverser 类来完成:
public void read(InputNode node) {
InputNode child;
while ((child = node.getNext()) != null) {
String name = child.getName();
if (name == "child1") {
//manually read object - no problem
MyFirstClass object = new MyFirstClass(child.getValue());
} else if (name == "child2") {
//automatically read object - here is the problem
Traverser traverser = new Traverser(context);
MySecondClass object = traverser.read(child, MySecondClass.class);
}
}
}
这样做有两个问题:
Traverser 类是 SimpleXML 的内部类,默认情况下,外部不可用。
我无权访问读取方法中的上下文对象。InputNode 不提供访问它的方法。
有没有什么方法可以在这个地方获取 Context 对象而不需要对 SimpleXML 进行复杂的修改?更改 Traverser 类的可见性很容易,但提供上下文却不是。
或者,有没有更简单的方法来做我需要的事情?