gpt4 book ai didi

java - JAXB/Eclipse链接 : unmap a type dynamically

转载 作者:行者123 更新时间:2023-11-30 09:38:58 26 4
gpt4 key购买 nike

我有一项服务应该能够在不同的细节级别或不同的冗长模式下提供“用户配置文件”。

这些用户配置文件在数据库中与 JPA2 同步,并且一切正常。使用 MOXy (EclipseLink),我还在 XML 中序列化了配置文件,在这里也一切正常。

但是,详细模式(BRIEF、SUMMARY、FULL)是通过在以 XML 序列化的用户配置文件中是否存在特定元素来实现的(例如,元素 QueryHistory,在使用 BRIEF 详细模式时不应被序列化) ).

简而言之:我想向 JAXBContext 指定某些元素不得序列化,并且我想在运行时指定它。

如果我很好理解,MOXy 可扩展模型 - 刷新 http://blog.bdoughan.com/2011/06/moxy-extensible-models-refresh-example.html能够做到这一点,但是这里有人知道实现此功能的更简单方法吗?

最佳答案

注意:我是 EclipseLink JAXB (MOXy) JAXB 2 (JSR-222) 的领导和成员专家组。

为了支持对数据的不同 View 的概念,我建议使用不同的 JAXBContext 实例来表示每个映射:BRIEF、SUMMARY、FULL。 MOXy 允许您通过利用其 external mapping document 将多个映射应用于域模型。 .

策略

  1. 用于映射完整模型的注释并使用 XML 元数据来减少映射
  2. 用于映射最小模型并使用 XML 元数据的注释展开映射

示例代码

JAXBContext 的三个实例建立在同一个类 (UserProfile) 上,但具有由 MOXy 的外部映射文档控制的不同映射。

JAXBContext briefContext = JAXBContext.newInstance(UserProfile.class);

Map<String, Object> summaryProperties = new HashMap<String, Object>(1);
summaryProperties.put("eclipselink-oxm-xml", "summaryMapping.xml");
JAXBContext summaryContext = JAXBContext.newInstance(new Class[] {UserProfile.class}, summaryProperties);

List<String> fullMappingXMLs = new ArrayList(2);
fullMappingXMLs.add("summaryMapping.xml");
fullMappingXMLs.add("fullMapping.xml");
Map<String, Object> fullProperties = new HashMap<String, Object>(1);
fullProperties.put("eclipselink-oxm-xml", fullMappingXMLs);
JAXBContext fullContext = JAXBContext.newInstance(new Class[] {UserProfile.class}, fullProperties);

下面的示例演示了如何从多个映射文档引导 JAXBContext

可扩展模型

在 MOXy 中扩展映射元数据的功能面向希望在不关闭正在运行的应用程序的情况下更改元数据的开发人员。这方面的一个例子是支持在线调查的域模型,需要对其进行增强以支持新问题。

关于java - JAXB/Eclipse链接 : unmap a type dynamically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9941557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com