如何使用 Java XML 绑定将对象图编组到特定深度?
作为 Java XML 绑定的新手,我面临着一个挑战。
假设我有一个场景,其中构建了我的域模型,并且我想将此域编组为 xml 结构。
现在我想提供不同的解组路径:
- 编组整个对象图[这里没有问题]
- 编组对象图直到特定深度! [挑战]
我无法找到一个在不引入太多复杂性的情况下解决这个问题的好方法。人们可以复制域并稍后手动复制,但这感觉不对。还有其他可用的解决方案吗?
being a newbie to Java XML binding i am facing a challenge.
Let say i have a scenario where my domain model is constructed and i want to marshall this domain to an xml structure.
Now i want to provide different unmarshall path's:
- Marshall the whole object graph [no problem here]
- Marshall an objectgraph until a specific depth!!! [challenge]
I cannot figure out a good way on how to tackle this without introducing to much complexity. One can make a copy of the domain and manually later that, but that does not feel right. Any other solutions available?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以利用 XmlAdapter 和 Marshal.Listener 来获得此行为:
演示
将设置 Marshal.Listener 来跟踪我们正在编组的树的深度。此外,我们还将设置可识别深度侦听器的运行时级别 XmlAdapter。当达到所需深度时,这些适配器将开始返回 null。
DepthListener
这个类的目的是跟踪当前的深度。
RootAdapter
XmlAdapter 的用途是在达到所需深度时开始返回 null 以停止编组过程。
Root
下面演示了如何通过 @XmlJavaTypeAdapter 注释在域对象上指定 XmlAdapter:
输出
以下是演示代码的输出:
You could leverage XmlAdapter and Marshal.Listener to get this behaviour:
Demo
A Marshal.Listener will be set to keep track of the depth of the tree we are marshalling. Also we will set runtime level XmlAdapters that are aware of the depth listener. These adapters will start returning null when the desired depth has been reached.
DepthListener
The purpose of this class is to to keep track of the current depth.
RootAdapter
The purpose of the XmlAdapter is to start returning null when the desired depth has been reached to stop the marshalling process.
Root
The following demonstrates how to specify the XmlAdapter on the domain object via the @XmlJavaTypeAdapter annotation:
Output
The following is the output from the demo code: