在独立应用程序中支持 Jersey Client 中的 XML

问题描述 投票:0回答:2

我有一个独立的应用程序,它连接到 RESTful API,如下所示:

Client client = ClientBuilder.newClient();
WebTarget target = client.target(hostWithPort).path(apiConfig.getUrl());

CreateReq request = new CreateReq();//this is annotated with @XmlRootElement

CreateResult result = target
      .request(MediaType.TEXT_XML_TYPE)
      .post(Entity.entity(request, MediaType.TEXT_XML_TYPE), CreateResult.class);

问题是我得到以下信息

MessageBodyProviderNotFoundException

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=text/xml, type=class com.mydomain.communication.CreateReq., genericType=class com.mydomain.communication.CreateReq.

根据 Jersey Documentation 必须已经支持 JAXB Provider,但不知何故它没有找到它。我想我错过了我的 Maven 中的依赖项和我的代码中的一些提供程序注册。在我的

pom.xml
中,我只依赖于
org.glassfish.jersey.core -> jersey-client

jaxb jersey jax-rs jersey-2.0 jersey-client
2个回答
2
投票

是的,我想

jersey-client
依赖项不会引入所需的
jersey-media-jaxb
。好像是从2.16开始的。

迁移指南

中所述

27.2。从泽西岛 2.15 迁移到 2.16

27.2.1.1。 JAX-B 提供者与核心分离

从版本 2.16 开始,所有 JAX-B 提供程序都捆绑在单独的模块中。


0
投票

我也有同样的问题。在独立的 Jersey 客户端应用程序中,XML 不起作用。它在服务器应用程序中工作,因此会自动检测到 jersey-media-jaxb。

在我的独立客户端应用程序中,我有 jersey-media-jaxb,但它不起作用。当我创建 Client 和 ClientConfig 并注册 JacksonFeature.class 时,JSON 工作正常,但我还没有找到如何注册 XML 支持。

clientConfig.register(JacksonFeature.class);  // usually auto-discovered

我查看了 jersey-media-jaxb-2.41.jar 但似乎没有需要注册的外部功能,而只有内部功能。

这是错误:

  SEVERE: MessageBodyWriter not found for media type=application/xml, type=class com.sap.cctr.rci.model.Queue, genericType=class com.sap.cctr.rci.model.Queue.
  org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/xml, type=class com.sap.cctr.rci.model.Q
  ueue, genericType=class com.sap.cctr.rci.model.Queue.
        at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:224)
        at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)
        at org.glassfish.jersey.logging.LoggingInterceptor.aroundWriteTo(LoggingInterceptor.java:244)
        at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)
        at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1116)
        at org.glassfish.jersey.client.ClientRequest.doWriteEntity(ClientRequest.java:461)
        at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:443)
...
© www.soinside.com 2019 - 2024. All rights reserved.