java - 动态添加类型到 jaxb 上下文

标签 java plugins jaxb rcp

我的基于 RCP 的项目中有多个插件。我希望能够在一个插件中定义 @XMLElements,然后可以从核心插件中编码/取消编码。为此,我在加载插件后立即报告可序列化的类。但是,JAXBContext 似乎不支持动态添加类。我通过将所有类保存在一个列表中并在每次基于该列表报告一些新类时创建一个新的 JAXBContext 来实现一个变通方法,但这个解决方案并不是很好。

有更好的方法吗?

最佳答案

您绝对不能将类动态添加到 JAXBContext。这与维护 JAXBContext 的线程安全有关。

我最近在 my blog 上发布了一个示例解释如何利用 @XmlAnyElement 注释生成可能具有不同负载的通用消息:

根对象

body 属性的根元素将由该对象 @XmlRootElement 控制。

package message;   

import javax.xml.bind.annotation.*;   

@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD) 
public class Message {
    @XmlAttribute
    private String to;       

    @XmlAttribute    
    private String from;       

    @XmlAnyElement    
    private Object body;   
}

创建 JAXBContext

可以在上下文路径上创建 JAXBContext,而不是在类数组上创建 JAXBContext:

JAXBContext.newInstance("message:customer:product"); 

此上下文路径包括 3 个由冒号“:”字符分隔的包名称。在这些包中的每一个中,我们都需要包含一个名为 jaxb.in​​dex 的文件和一个文件列表。下面是客户包中 jaxb.in​​dex 文件的示例:

Address
Customer 

当我们想要向我们的框架添加一个模型来表示订单时,我们会将我们的 JAXBContext 创建扩展为 like(此字符串可以作为变量传入):

JAXBContext.newInstance("message:customer:product:order"); 

关于java - 动态添加类型到 jaxb 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3628306/

相关文章:

java - 无法在模拟器/虚拟机上运行 GCM (C2DM) : API level 14

jquery - 覆盖 jQuery 插件方法,默认情况下和单个实例

php - 如何为我的网络用户创建一个 "todo"列表来勾选?

java - 建议Libgdx初学者教程?

java - 用于比较两个空对象的 junit 测试用例

java - 如何在 api url 中传递用户名和密码

android - Phonegap 视频插件?

java - JAXB UnmarshallException 意外元素,但 "Expected elements are (none)"

java - JAXB XML输出格式问题

java - 在 JAXB/Resteasy 中使用泛型类扩展时的 NPE