Strategy
注釈付きのクラスを XML スキーマとして使用し、スキーマに存在しないものは処理されない (訪問者はアクセスできない) ため、このアプローチは機能しないと思います。
コンバーターは次のように使用できます。
@Root(name = "key", strict = false)
@Convert(KeyConverter.class)
public class Key {
private String element;
public Key(String elementValue) {
element = elementValue;
}
}
コンバーターは、変換中に値を格納します。
public class KeyConverter implements Converter<Key> {
private String otherValue;
@Override
public Key read(InputNode node) throws Exception {
String elementValue = node.getNext("element").getValue().trim();
otherValue = node.getNext("other").getValue().trim();
return new Key(elementValue);
}
@Override
public void write(OutputNode arg0, Key arg1) throws Exception {
throw new UnsupportedOperationException();
}
/**
* @return the otherValue
*/
public String getOtherValue() {
return otherValue;
}
}
まとめると:
Registry registry = new Registry();
KeyConverter keyConverter = new KeyConverter();
registry.bind(Key.class, keyConverter);
Persister serializer = new Persister(new RegistryStrategy(registry));
Key key = serializer.read(Key.class, this.getClass().getResourceAsStream("key.xml"));
// Returns the value "acquired" during the last conversion
System.out.println(keyConverter.getOtherValue());
これはあまりエレガントではありませんが、必要に応じて適切な場合があります。