2012-12-20 33 views
1

我正在使用Java的SimpleXML库。目前,我正试图使用​​@Convert注释反序列化节点。我覆盖转换器接口的read()方法,它具有以下原型:使用AnnotationStrategy时自动反序列化子节点

Converter.read(InputNode node)

在read()方法,我迭代子节点和反序列化它们。但是,一些子节点相当复杂,我希望它们使用当前上下文以正常方式反序列化。我认为它可以使用横移类完成:

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. 横移类是内部类的SimpleXML,并且在默认情况下,它外面是不可用的。

  2. 我在read方法中没有访问上下文对象的权限。 InputNode不提供访问它的方法。

有没有什么办法在没有复杂的SimpleXML修改的情况下获取Context对象?改变Traverser类的可见性很容易,但提供上下文不是。

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

回答

1

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