如何在解析XML时使XStream将未映射的标记映射到HashMap?
问题描述:
有我想要转换为Java bean的XML文档。我想将我的bean中缺少的字段标记为hashMap,因为这些字段名称不断变化。有没有办法做到这一点?如何在解析XML时使XStream将未映射的标记映射到HashMap?
例如,我的XML看起来像
<employee>
<firstname>stack</firstname>
<lastname>alpha</lastname>
<phone1>999-999-9999</phone1>
</employee>
我的Java bean的样子
@XstreamAlias("employee")
public class Employee {
private String firstname;
private String lastname;
private map<String, String> unknownfields;
}
当我加载XML到我的java bean,它应该看起来像
firstname="stack", lastname="alpha", unknownfields=[{"phone1","999-999-9999"}]
知道这是一个糟糕的设计,但想检查是否可以使用xstream实现。
答
实现您自己的Converter。请参阅JavaBeanConverter以获取参考实现,因为您希望尽可能接近该实现。
你需要以不同的方式处理事情的唯一的地方是这样的(内解组法)
if (propertyExistsInClass) {
Class<?> type = determineType(reader, result, propertyName);
Object value = context.convertAnother(result, type);
beanProvider.writeProperty(result, propertyName, value);
seenProperties.add(new FastField(resultType, propertyName));
} else {
throw new MissingFieldException(resultType.getName(), propertyName);
}
其中,从其他块时,它抛出MissingFieldException
,你应该填充您的Map
。 XML元素名称很容易在这里获得,但您需要调整该值。拿到价值的线索是在如果块略高于:
Object value = context.convertAnother(result, type);
唯一的问题是你没有一个Java类型值转换为。字符串也许?
我会继承JavaBeanConverter
,只是覆盖unmarshal
方法,但适合您的需求。
谢谢Soumik。理解你的提示。会试试看。 – Pals