首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JAXB“也不知道它的任何超类”请避免@XmlSeeAlso

JAXB“也不知道它的任何超类”请避免@XmlSeeAlso
EN

Stack Overflow用户
提问于 2014-08-20 17:22:05
回答 1查看 17.1K关注 0票数 2

解释与变通

目前,我正在使用JAX,让JAXB绑定在JEE6项目中自动处理将数据转换为XML和JSON的过程。在我尝试创建一个通用的响应对象来包装我所有的信息之前,一切都非常完美。

当我尝试使用我的泛型响应类com.eln00b.Wrapper (其中包含一个private Object result属性)时,我得到:

javax.xml.bind.MarshalException -除了链接的例外: com.sun.istack.SAXException2: class com.eln00b.CustomObject或它的任何超类都是已知的。javax.xml.bind.JAXBException:类com.eln00b.CustomObject和它的任何超类都是已知的。

所以我加入了com.eln00b.Wrapper

代码语言:javascript
代码运行次数:0
运行
复制
@XmlSeeAlso ({com.eln00b.CustomObject})
public class Wrapper {
}

一切都很好。

问题

我希望这是非常通用的。我不希望经常将类添加到@XmlSeeAlso类的com.eln00b.Wrapper注释中。如何让系统自动定位JAXB上下文的所有类?

即使这是我使用反思之类的东西加载数据的黑客,这也没问题。我只是不知道如何在不使用@XmlSeeAlso注释的情况下获得加载所有这些数据的上下文。有了大量的注释,我将创建它,它将根本无法工作。

它是如何手动工作的

它只是通过添加数据来手动工作,比如手动转换。但是,我不想使用/JSON创建,除非我绝对需要(我不想处理内容协商或类似的事情)。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
JAXBContext.newInstance(new Class[] {Wrapper.class, CustomObject.class});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-22 13:39:37

因此,以下是自定义解析器的本质:

代码语言:javascript
代码运行次数:0
运行
复制
@Provider
@Produces ({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public class JaxbContextResolver implements ContextResolver<JAXBContext> {

  @Override
  public JAXBContext getContext(Class<?> type) {
    // load appropriate context data
    Class[] bindTypes = ...

    // create 
    try {
      return JAXBContext.newInstance(bindTypes);
    } catch (JAXBException e) {
      // todo:  this can be handled better but works for the example
      throw new RuntimeException(e);
    }
  }
}

现在,对“加载适当的上下文数据”的处理非常简单。基本上,通过使用运行时数据模拟@XmlSeeAlso

  1. 创建一个自定义的东西(注释、处理方法等),将特定字段/方法标记为“上下文”。
  2. 加载字段/方法数据,提取数据类型
  3. 请确保不加载重复项,并检查无限递归可能性。

现在,我使用了一些缓存来帮助自己提高效率。我还为我的根对象创建了一个稍微复杂一些的设置,它实际上独立地跟踪类数据,并使它非常快速。我还创建了一个将类标记为“上下文”的替代方法,我使用包检查通过注释加载类,并且只是自动添加到上下文中,但我还没有检查效率。我有一些关于第三个实现的想法,但我想让更多的基准完成。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25410831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档