Jersey corpo del messaggio lettore non trovato maven-costruito JAR

Mia applicazione utilizza un REST (JAX-RS Jersey) interfaccia. Quando ho eseguito in Eclipse, il tutto e’
s bene. Gli oggetti di dominio, sono annotati, io non sto usando un file XML per il RESTO la mappatura.

Ora ho creato un JAR autonomi con maven-assemblea-plugin, che racchiude l’applicazione e tutte le dipendenze in un unico file JAR eseguibile. Questo sembra funzionare.

Ma quando avvio l’applicazione e la richiesta di un oggetto dal server, Jersey, si lamenta, che non riesce a trovare il corpo di un messaggio reader:

com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java type, class de.rybu.atuin.core.entity.User, and MIME media type, application/json, was not found

Tutte le idee perché questo accade?

EDIT: Dopo ho dormito una notte su di esso, ho notato che si lamenta JSON… ma io sto usando solo per la serializzazione XML. Strano.

questo thread aiutare? Se non, forse, aggiungere alcuni dettagli circa il vostro codice, l’Utente di classe…

OriginaleL’autore Olvagor | 2010-04-28

5 Replies
  1. 3

    Mi sono scontrato con lo stesso problema, la ricerca su stackoverflow, ho trovato che l’aggiunta di jersery-json-1.x.jar in WEB-INF/lib come suggerito da questa soluzione per risolvere la questione.
    Si prega di dare il premio a Mikhail!

    OriginaleL’autore

  2. 1

    Ho risolto il problema e credo di sapere come 🙂

    Le mie risorse erano annotati come questo:

    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
    @Path(CONTEXT_ADDRESS)
    public class UserResource
    {
    }

    Mio client utilizzato ordine inverso:

    WebResource wr = ...
    User user = wr.accept(MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_XML_TYPE).get(new GenericType<User>(){});

    Non so che inizialmente ha causato il problema, ma l’ho completamente rimosso il supporto JSON e ora funziona. Forse sarebbe stato sufficiente passare il fine di JSON e XML nel client, ma non ho provato.

    OriginaleL’autore

  3. 1

    Mi sono imbattuto in un problema simile (ha lavorato bene in esecuzione da eclipse o distribuito come separato vasetti ma non eseguibile jar) e ha scoperto che questo approccio per la creazione di jar eseguibili con maven dipendenza plugin maven vaso plugin funziona correttamente. Questo è perché mette le dipendenze in un separato lib e poi comprende che nel classpath nel manifesto come contrasto con l’unione di tutti insieme, che può causare numerosi problemi.

    OriginaleL’autore

  4. 1

    Ho affrontato lo stesso problema (http://goo.gl/Mk9sZ) . Non ha risolto modificando maven dipendenza per jersey-multipart vaso dalla 1.0.2 alla versione 1.8 (Utilizzato la stessa dipendenza nel lato client che come fornitore.

                 <dependency>
                    <groupId>com.sun.jersey.contribs</groupId>
                    <artifactId>jersey-multipart</artifactId>
                    <version>1.8</version>
                 </dependency>

    È possibile trovare il codice completo che ho usato a http://goo.gl/Mk9sZ

    OriginaleL’autore

  5. 0

    Sto usando Jersey Client 1 e per risolvere questo problema, ho creato un generico messaggio json corpo del lettore.

    public class JSONMessageBodyReader<T> implements MessageBodyReader<T> {
    
    @Override
    public boolean isReadable(Class<?> arg0, Type arg1, Annotation[] arg2,
            MediaType arg3) {
        return true;
    }
    
    @SuppressWarnings("unchecked")
    @Override
    public T readFrom(Class<T> clazz, Type type, Annotation[] arg2,
            MediaType arg3, MultivaluedMap<String, String> arg4,
            InputStream is) throws IOException, WebApplicationException {
    
        byte[] bytes = new byte[is.available()];
        is.read(bytes);
        String json = new String(bytes, "UTF-8");
    
        ObjectMapper mapper = new ObjectMapper();
        mapper.readValue(json, TypeFactory.defaultInstance().constructType(type));
    
        return (T) mapper.readValue(json, TypeFactory.defaultInstance().constructType(type));
    
    }

    }

    OriginaleL’autore

Lascia un commento