[英]No MessageBodyWriter for Single
我正在尝试使用 resteasy-rxjava2 在 vertx 应用程序(使用我们拥有的非 vertx 遗留库)中使用 jaxb 提供 XML 文档。 但我得到:
Could not find MessageBodyWriter for response object of type:
org.jboss.resteasy.rxjava2.propagation.ContextPropagatorOnSingleAssemblyAction$ContextPropagatorSingle of media type:
application/xml;charset=UTF-8
据我所知,这归结为MessageBodyWriter
和AsyncResponseProvider
之间的区别,后者位于Single
( SingleProvider
) 的 resteasy-rxjava2 依赖项中。
我有以下 resteasy 服务定义
@GET
@Path(FdsnwsPaths.QUERY)
@Produces(MediaType.APPLICATION_XML)
@Stream
// CHECKSTYLE:OFF too many parameters
public Response getQuery(...)
如何使用SingleProvider
或其他方式让 resteasy 正确地异步提供数据。
@Get
方法必须显式返回Single
否则它不起作用。 (不能使用Response
或Object
)。 在我的例子中, Single
包含 jaxb xml 根元素。
@GET
@Path(FdsnwsPaths.QUERY)
@Produces(MediaType.APPLICATION_XML)
@Stream
public Single<FDSNStationXML> getQuery(...)
然后,为了使事情变得更复杂,为了将特定的异常类型和 map 处理为特定的响应状态代码,我必须创建一个自定义ExceptionMapper
,它创建Response
object 我曾经能够直接在方法中创建。 (在 resteasy-vertx 中,我没有找到关于如何执行此操作的文档,但就我而言,我正在创建自己的VertxRestEasyDeployment
object,因此我可以像这样注册 ExceptionMapper(s) 的 class:
VertxResteasyDeployment deployment = new VertxResteasyDeployment();
deployment.getActualProviderClasses().addAll(providerClasses);
作为参考,这一切都是通过以下方式完成的:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.