繁体   English   中英

没有 Single 的 MessageBodyWriter

[英]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

据我所知,这归结为MessageBodyWriterAsyncResponseProvider之间的区别,后者位于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否则它不起作用。 (不能使用ResponseObject )。 在我的例子中, 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);

作为参考,这一切都是通过以下方式完成的:

  • RestEasy 5.0.3.Final(包括resteasy-rxjava2)
  • RxJava 2.2.20
  • 顶点 3.9.5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM