java-如何将运行时数据注入使用JAXB解析XML时创建的对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何将运行时数据注入使用JAXB解析XML时创建的对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1230字,纯文字阅读大概需要2分钟。
内容图文
我必须解析一个复杂的XML文档.我的模型中的一些类实现接口HasDate:
interface HasDate {
public void setDate(Date date);
}
创建解组器的日期是已知的:
// here I know the date.
JAXBContext ctx = JAXBContext.newInstance("com.mycompany.mymodel");
Unmarshaller unmarshaller = ctx.createUnmarshaller();
unmarshaller.unmarshal(input);
我想在JAXB解析文档时为实现HasDate的类的每个实例调用setDate().
这是我自己知道的两种解决方案:
我可以对每个相关的类进行注释,如下所示:
@XmlType(factoryClass = ObjectFactory.class, factoryMethod = "createMyObject")
方法createMyObject()将调用setDate().该解决方案的问题在于createMyObject()必须是静态的.将信息设置为静态成员会使解决方案不安全.
作为此解决方案的一种变体,我可以在解析之前将日期放入ThreadLocal. createMyObject()将从ThreadLocal读取日期并调用setDate().该解决方案是线程安全的,但看起来像一个补丁.
另一种解决方案是使用反射来发现JAXB创建的对象图,递归遍历它,并在需要时调用setDate().该解决方案是线程安全的,但需要一些实现工作,并且将来需要维护.
我想知道JAXB是否有其他内置解决方案来解决此问题.
解决方法:
您可以实现Unmarshaller.Listener并将其设置在Unmarshaller上.然后,如果目标类是HasDate的实例,则在afterUnmarshal方法上可以调用setDate方法.
> http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Unmarshaller.Listener.html
内容总结
以上是互联网集市为您收集整理的java-如何将运行时数据注入使用JAXB解析XML时创建的对象全部内容,希望文章能够帮你解决java-如何将运行时数据注入使用JAXB解析XML时创建的对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。