gpt4 book ai didi

java - 如何使用 JAX-B 处理接口(interface)的各种具体实现

转载 作者:数据小太阳 更新时间:2023-10-29 02:36:31 26 4
gpt4 key购买 nike

我有一个类,我需要将其编码为 XML。

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ClassToBeMarshalled {
public Interface object;
}

接口(interface)由许多具体类实现,其中大部分是特定于供应商的,我无法访问其源代码。

所以我的问题是:

如果我尝试编码该类,JAX-B 会提示当前接口(interface)的具体实现在上下文中未知 - 换句话说,具体类未通过调用提供的 JAXBContext.newInstance 加载到上下文中当前实现。

解决该问题的最常见方法是:

1) 使用 XMLSeeAlso - 不是一个可行的选择,因为有很多具体类

2) 用@XmlRootElement 注释每个类——这不是一个可行的选择,因为我无权访问所有类

有谁知道让 JAX-B 在需要时将具体类加载到其上下文中的方法吗?

谢谢。

附言:我正在使用 JAX-B RI

最佳答案

您可以将您的对象标记为@XmlAnyElement (InterfaceHandler.class) 其中 InterfaceHandlerDomHandler能够在 DOM 表示和实际实现类之间进行转换。该处理程序可能应该在编码时存储类名,并在解码时使用该类名创建实例。它可能手动配置实例,可能使用一些设计用于与 bean 一起工作的帮助程序类,或者它可能使用另一个 jaxb 上下文,其中包含特定命名的类,并将处理该对象及其所有嵌套子对象。

另请查看 @XmlElementRef注解。我担心为了使它正常工作,您至少必须在编译时知道所有的实现类,但也许有一种方法可以使它为您工作,而且比通用解决方案麻烦更少上一段中概述。

关于java - 如何使用 JAX-B 处理接口(interface)的各种具体实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12627754/

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