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”已经是已知的。