2012-12-20 16 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。