![](/img/trans.png)
[英]JAXB Issue — class … nor any of its super class is known to this context
[英]JAXB “nor any of its super class is known to this context” avoid @XmlSeeAlso
目前,我正在使用JAX-RS,并让JAXB绑定自动为我在JEE6项目中处理将数据转换为XML和JSON的过程。 直到我尝试创建一个通用的响应对象来包装我所有的信息之前,一切工作都异常完美。
当我尝试使用通用响应类com.eln00b.Wrapper
(其中包含private Object result
属性)时,我得到:
javax.xml.bind.MarshalException-具有链接的异常:[com.sun.istack.SAXException2:类com.eln00b.CustomObject或其任何超类对此上下文都是已知的。 javax.xml.bind.JAXBException:com.eln00b.CustomObject类或其任何超类对此上下文都是已知的。
所以我添加到com.eln00b.Wrapper
:
@XmlSeeAlso ({com.eln00b.CustomObject})
public class Wrapper {
}
一切正常。
我希望这是非常通用的。 我不想牛逼不断添加类的@XmlSeeAlso
上标注com.eln00b.Wrapper
类。 我如何让系统自动为JAXB上下文定位我的所有类?
即使是在黑客中使用了Reflections之类的东西来加载数据,也没关系。 我只是不确定如何在没有@XmlSeeAlso
批注的情况下获取上下文以加载所有数据。 我将使用大量注释来创建它,但是根本无法使用。
它只是通过添加数据来手动工作,就像手动转换一样。 不过,我不希望使用手动XML / JSON的创建,除非我绝对需要(我不想处理内容协商或类似的东西)。
样品:
JAXBContext.newInstance(new Class[] {Wrapper.class, CustomObject.class});
因此,自定义解析器的本质如下所示:
@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
:
现在,我使用了一些缓存来帮助自己提高效率。 我还为我的根对象创建了一个稍微复杂的设置,该设置实际上是自己跟踪类数据并使其非常快速。 我还创建了一个替代方法,将类标记为“ contextual”,我使用程序包检查通过注释加载该类,并且仅将其自动添加到上下文中,但尚未检查效率。 对于第三次实施,我有一些想法,但我想完成更多的基准测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.