0
<FooBar>
<foo name="FooName">
<bar .../>
<bar .../>
</foo>
</FooBar>
的Java:
class FooBar {
private Foo foo;
}
我尋找的是不要保存Foo
對象FooBar
而是添加Foo
方式對象存儲在靜態映射中,並只存儲類FooBar
中的屬性名稱(FooName)。
換句話說,我想僅在需要時解析foo
(未知名稱)並將名稱存儲在FooBar
中。
事情是這樣的:
FooBar.java
class FooBar {
@XStreamConverter(FooConverter.class)
private String foo;
}
FooConverter.java
public class FooConverter extends ReflectionConverter {
public FooConverter(Mapper mapper, ReflectionProvider reflectionProvider) {
super(mapper, reflectionProvider);
}
@Override
public void marshal(Object o, HierarchicalStreamWriter writer, MarshallingContext mc) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext uc) {
String name = reader.getAttribute("name");
Foo foo = FOOMAP.get(name);
if (foo != null) {
return name;
}
foo = (Foo) super.unmarshal(reader, uc);
FOOMAP.put(name, foo);
return name;
}
@Override
public boolean canConvert(Class type) {
return type == Foo.class || type == String.class;
}
}
目的是隻解析一次foo
標籤,如果我們已經知道它(同名屬性)並且能夠做一種包含<foo name="FooName" />
,因爲「FooName」已經是已知的。