1

我正在使用 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);
        }
    }
}

这样做有两个问题:

  1. Traverser 类是 SimpleXML 的内部类,默认情况下,外部不可用。

  2. 我无权访问读取方法中的上下文对象。InputNode 不提供访问它的方法。

有没有什么方法可以在这个地方获取 Context 对象而不需要对 SimpleXML 进行复杂的修改?更改 Traverser 类的可见性很容易,但提供上下文却不是。

或者,有没有更简单的方法来做我需要的事情?

4

1 回答 1

1

您可以简单地使用您创建的 Persister,而不是使用 AnnotationStrategy 使用 RegistryStrategy。

于 2013-03-05T09:53:51.680 回答