【发布时间】:2014-03-05 03:21:03
【问题描述】:
我正在尝试使用 Spring Wadl 生成器: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
来自(简化的stacktrack)
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)
问题
我可以强制一个默认适配器连接到接口吗?
通常人们可以只为特定适配器的接口添加注释,但我不想更改和/或分析数百个类。
相关链接
- java.util.List is an interface, and JAXB can't handle interfaces
- http://blog.bdoughan.com/2013/03/jaxb-and-javautilmap.html
- https://weblogs.java.net/blog/2006/06/06/jaxb-and-interfaces
已编辑
很遗憾,我无法更改 REST API。
支持将 Java 类型转换为流的提供者的合同。要添加 MessageBodyWriter 实现,请使用 @Provider 注释实现类。
WADL 应按原样提供服务信息。例如,通过注释添加 MessageBodyWriter 会更改 API。由于我可以更改 QNameBuilder.discoverQNameFromJaxb,是否有可能在这个“时刻”将 MessageBodyWriter 更改/提供为 java.util.Map 并改回 WADL 生成?
【问题讨论】:
标签: java xml spring-mvc jaxb wadl