[英]Cannot Discover QNAme from JAXB for class: java.util.Map
我正在尝试使用Spring Wadl Generator : https : //github.com/autentia/wadl-tools 。
AFAIK,这个工具使用与Tomasz Nurkiewicz @ tomasz-nurkiewicz相同的想法:从Spring获取RequestMappingHandlerMapping,检查每个元素并生成适当的WADL。
在内部,该工具将使用JAXB在控制器中创建参数的XML。 尽管很好,但事情并没有很好地适用于我的应用程序。
我得到以下异常:
2014-02-07 15:33:41,827 WARN user=unauthenticatedUser com.autentia.xml.namespace.QNameBuilder - Cannot discover QName from JAXB annotations for class: java.util.Map. Preparing generic QName.com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
java.util.Map is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
at java.util.Map
来自(简化的堆栈跟踪)
at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:106)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:471)
(...)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:248)
(...)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
at com.autentia.xml.namespace.QNameBuilder.discoverQNameFromJaxb(QNameBuilder.java:68)
(...)
at com.autentia.web.rest.wadl.builder.ApplicationBuilder.build(ApplicationBuilder.java:36)
这个问题
我可以强制默认适配器到接口吗?
通常人们可以只为特定适配器的接口添加注释,但我不想更改和/或分析数百个类。
相关链接
不幸的是我无法更改REST API。
支持将Java类型转换为流的提供程序的合同。 要添加MessageBodyWriter实现,请使用@Provider注释实现类。
WADL应该提供服务信息。 例如,通过注释添加MessageBodyWriter会更改API。 既然我可以更改QNameBuilder.discoverQNameFromJaxb,那么在这个非常“瞬间”的MessageBodyWriter可能会更改/提供到java.util.Map并更改回WADL生成吗?
JAXB(JSR-222)实现可以将java.util.Map
作为映射字段/属性处理,但不能将其作为根级别对象处理。 您可能有一个与RESTful操作相对应的方法,该操作返回以获取Map
。
Map
为根级别对象,您可以引入具有类型的映射字段/属性一个新的域对象Map
并使用它。 Map
类实现MessageBodyReader
/ MessageBodyWriter
,以便使用它来代替正在使用的JAXB。 我不想改变和分析数百个班级
你不会。 您只需添加一个MessageBodyReader
/ MessageBodyWriter
识别Map
类(对于“application / xml”媒体类型)以对其进行特殊处理。 另一种方法是继续获得例外。
基本上我无法更改REST API。
您不会更改REST API。 您需要确保MessageBodyReader
/ MessaggeBodyWriter
正常工作。
通过使用低级别的暗魔法,可以为Map提供MessageBodyWriter并在之后删除吗?
它不是那么低级别或黑暗魔法。 您可以仅为Map
类提供特殊处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.