Исключение на Джерси: SEVERE: программа чтения сообщений для класса Java - PullRequest
34 голосов
/ 21 декабря 2011

У меня есть Rest WS на основе Джерси, который выводит JSON.Я внедряю клиент Jersey для вызова WS и получения ответа JSON.У меня есть код клиента ниже

WebResource r = restClient.resource(UriBuilder.fromUri("http://localhost/").port(8080).build());
String resp = r.path("/user").accept(MediaType.APPLICATION_JSON).get(String.class);
User[] users = r.path("/user").accept(MediaType.APPLICATION_JSON).get(User[].class);

Во 2-й строке правильно выводится строковый ответ JSON, однако 3-й строки для маршалинга JSON в POJO не происходит, и я получаю следующее исключение: трассировка стека

SEVERE: A message body reader for Java class [Lorg.shoppingsite.model.entity.jpa.User;, and Java type class [Lorg.shoppingsite.model.entity.jpa.User;, and MIME media type application/json was not found
Dec 21, 2011 11:32:01 AM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: The registered message body readers compatible with the MIME media type are:
*/* ->
  com.sun.jersey.core.impl.provider.entity.FormProvider
  com.sun.jersey.core.impl.provider.entity.StringProvider
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.ReaderProvider
  com.sun.jersey.core.impl.provider.entity.DocumentProvider
  com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
  com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.EntityHolderReader

В моем запросе указаны правильные типы MIME.Мой POJO был аннотирован XMLRootElement.Чего мне не хватает

Спасибо

Ответы [ 13 ]

0 голосов
/ 14 ноября 2013

На шахте была похожая ситуация. Я получаю эту ошибку в критические времена, и я не помню, как решал ее раньше, что я делал много раз. После напряженных часов осмотра я решил и воспроизвел ошибку и убедился, насколько просто решение этой ситуации.

Хорошо - решение: удалить ( или исправить ) все новые изменения в файлах свойств вашего основного проекта.

Да, это так. На самом деле, мой проект является многоплановым огромным, и вы знаете, что обход без корректных зависимостей - это редкий сценарий, который часто получают из git (RAC тоже). Мой проект получал почти все настраиваемые вещи из файла свойств, который является общим для примерно 15 модулей (подпроектов) с большим количеством внутризависимостей между ними. Зависимость Джерси-Джсона всегда присутствует в моем объединенном родительском пом. Аннотации XML не являются проблемой, так как проект запускается около 100 раз после их изменения. некоторые решения здесь указывают на web.xml и такие вещи, как POJOMappingFeature. В моем случае я даже не коснулся модуля webapp в этой сборке. Так или иначе, это решение сработало для меня, и я трачу время, чтобы записать это в SO, на случай, если я когда-нибудь попаду в эту ошибку, мне не придется тратить свои сонные ночи. (конечно, и для тебя тоже)

0 голосов
/ 31 января 2013

Просто проверьте, запускаете ли вы разные экземпляры в затмении.Я завершил все остальные сеансы, чистая сборка устранила проблему

0 голосов
/ 11 февраля 2012

Вам нужно реализовать свои MessageBodyReader и MessageBodyWriter для вашего класса Lorg.shoppingsite.model.entity.jpa.User.

package javax.ws.rs.ext;

import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;

public interface MessageBodyReader<T extends Object> {

    public boolean isReadable(Class<?> type, 
        Type genericType, 
        Annotation[] annotations, 
        MediaType mediaType);

    public T readFrom(Class<T> type, 
        Type genericType, 
        Annotation[] annotations, 
        MediaType mediaType, 
        MultivaluedMap<String, String> httpHeaders, 
        InputStream entityStream) throws IOException, WebApplicationException;
}

package javax.ws.rs.ext;

import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;

public interface MessageBodyWriter<T extends Object> {

    public boolean isWriteable(Class<?> type, 
        Type genericType, 
        Annotation[] annotations, 
        MediaType mediaType);

    public long getSize(T t, 
        Class<?> type, 
        Type genericType, 
        Annotation[] annotations, 
        MediaType mediaType);

    public void writeTo(T t, 
        Class<?> type, 
        Type genericType, 
        Annotation[] annotations, 
        MediaType mediaType, 
        MultivaluedMap<String, Object> httpHeaders, 
        OutputStream entityStream) throws IOException, WebApplicationException;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...