Pertanyaan Pembaca tubuh pesan Jersey tidak ditemukan di JAR maven-built


Aplikasi saya menggunakan antarmuka REST (JAX-RS Jersey). Ketika saya menjalankannya di Eclipse, semuanya ' baik-baik saja. Objek domain dianotasi, saya tidak menggunakan file XML untuk pemetaan REST.

Sekarang saya membuat JAR yang berdiri sendiri menggunakan maven-assembly-plugin, yang mengemas aplikasi dan semua dependensi dalam satu file JAR yang dapat dieksekusi. Ini juga tampaknya berhasil.

Tapi ketika saya memulai aplikasi dan meminta objek dari server, Jersey mengeluh, bahwa itu tidak dapat menemukan pembaca pesan tubuh:

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

Ada gagasan mengapa ini terjadi?

EDIT: Setelah saya tidur malam di atasnya, saya melihat bahwa itu mengeluh tentang JSON ... tapi saya hanya menggunakan XML untuk serialisasi. Aneh.


5
2018-04-28 14:57


asal


Jawaban:


Saya mengalami masalah yang sama, mencari di stackoverflow, saya menemukan bahwa menambahkan jersery-json-1.x.jar ke WEB-INF / lib seperti yang disarankan oleh solusi ini akan menyelesaikan masalah. Tolong beri penghargaan kepada Mikhail!


3
2018-05-16 04:35



Saya memperbaiki masalah dan saya rasa saya tahu caranya :-)

Sumber daya saya dianotasi seperti ini:

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

Klien saya menggunakan urutan terbalik:

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

Saya tidak tahu apa yang awalnya menyebabkan masalah tetapi saya benar-benar menghapus dukungan JSON dan sekarang berfungsi. Mungkin itu sudah cukup untuk hanya swith urutan JSON dan XML di klien tetapi saya tidak mencobanya.


1
2018-04-29 09:55



Saya mengalami masalah yang sama (bekerja baik berjalan dari gerhana atau disebarkan sebagai guci terpisah tetapi tidak dari guci yang dapat dieksekusi) dan menemukan bahwa pendekatan ini untuk membuat guci yang dapat dieksekusi menggunakan plugin dependensi maven dan plugin maven jar berfungsi dengan benar. Ini karena meletakkan dependensi dalam direktori lib yang terpisah dan kemudian memasukkannya ke dalam classpath dalam manifes sebagai lawan menggabungkan semuanya bersama-sama yang dapat menyebabkan banyak masalah.


1
2018-05-09 01:59



Saya menghadapi masalah yang sama (http://goo.gl/Mk9sZ). Itu dipecahkan dengan mengubah dependensi maven untuk jar jersey-multipart dari versi 1.0.2 hingga 1.8 (Digunakan ketergantungan yang sama di sisi klien serta sisi penyedia.

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

Anda dapat menemukan kode lengkap yang saya gunakan di http://goo.gl/Mk9sZ


1
2017-07-08 10:00



Saya menggunakan Jersey Client 1 dan untuk memecahkan masalah ini, saya membuat pembaca pesan json generik.

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));

}

}


0
2017-08-28 14:50