【发布时间】:2018-01-11 22:12:12
【问题描述】:
我正在尝试使用 openfire REST-API-Client。我正在调用方法以使用以下代码将用户添加到 openfire。
AuthenticationToken authenticationToken = new AuthenticationToken("username","password");
RestApiClient restApiClient = new RestApiClient("url",port, authenticationToken);
UserEntity openFireUser = restApiClient.getUser(user.getUsername());
当我调用 api 时,我得到以下异常。
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=text/html;charset=UTF-8, type=class org.igniterealtime.restclient.entity.UserEntity, genericType=class org.igniterealtime.restclient.entity.UserEntity.
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:231)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155)
at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1085)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:874)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:808)
at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:326)
at org.glassfish.jersey.client.InboundJaxrsResponse$1.call(InboundJaxrsResponse.java:115)
我用谷歌搜索了一下,发现依赖项有问题。但没有任何效果。
下面是我的 build.gradle
compile(group: 'org.igniterealtime', name :'rest-api-client', version: igniterealtime_rest_api_version){
exclude group: 'org.slf4j', module: 'slf4j-simple'
exclude group: 'org.slf4j', module: 'slf4j-api'
}
我也尝试将以下依赖项添加到我的 build.gradle 中,但没有奏效。
compile group: 'org.glassfish.jersey.core', name: 'jersey-client', version: '2.23'
compile group: 'org.glassfish.jersey.media', name: 'jersey-media-json-jackson', version: '2.2'
compile group: 'org.glassfish.jersey.media', name: 'jersey-media-moxy', version: '2.24'
compile group: 'com.fasterxml.jackson.jaxrs', name: 'jackson-jaxrs-json-provider', version: '2.4.1'
【问题讨论】:
-
您连接到正确的 URL 了吗?在错误消息中,它说您收到的响应具有媒体类型
text/html,显然不能将其解析为用户实体。这很可能是由于没有收到成功的响应(200 OK)或连接到错误的 URL。 -
做一些调试。检查状态码和正文。在客户端反序列化之前检查状态码总是一个好主意,所以你可以在错误状态下做其他事情
-
得到了问题。实际上我必须在 openfire 中安装 REST API 插件。
-
@ashishjmeshram - 面临同样的问题,在用于休息调用的 java 代码中 - 请求、响应都将内容类型指定为 application/json 但出现异常为
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=text/html;charset=UTF-8, type=interface java.util.Map, genericType=interface java.util.Map.你能解释一下你是怎么做的吗解决您的问题? -
@ChristophBöhme,谢谢!就我而言,这是由错误的端点地址引起的!我一直在解决这个错误,直到我检查了另一个工作正常的服务(并且地址无效,它导致了同样的错误)。
标签: java jersey openfire rest-client