Hi you can surely not use the writer but OutputStream directly or OutputStreamWriter will use a buffer to not touch the stream each time you write a byte - for performances. That's why you needed to call flush (tomcat, tomee, or plain main ;)) Romain Manni-Bucau Twitter: @rmannibucau Blog: http://rmannibucau.wordpress.com/ LinkedIn: http://fr.linkedin.com/in/rmannibucau Github: https://github.com/rmannibucau
2014-10-20 3:20 GMT+02:00 iluvtr <[email protected]>: > I solved guys!, it just was a matter of adding writer.flush(); at the end of > the method 'writeTo' > > But I don't remember I added that line to plain Tomcat, well, it's solved > anyway, > > The code is here maybe some of you find it useful > > > @Provider > @Produces(MediaType.APPLICATION_JSON) > @Consumes(MediaType.APPLICATION_JSON) > public class GsonJsonProvider<T> implements MessageBodyReader<T>, > MessageBodyWriter<T> { > > private Gson gson; > > public GsonJsonProvider() { > gson = new Gson(); > } > > @Override > public boolean isReadable(Class<?> type, Type genericType, Annotation[] > annotations, MediaType mediaType) { > return true; > } > > @Override > public T readFrom(Class<T> type, Type genericType, Annotation[] > annotations, MediaType mediaType, MultivaluedMap<String, String> > httpHeaders, > InputStream entityStream) throws IOException, > WebApplicationException { > InputStreamReader streamReader = new InputStreamReader(entityStream, > StandardCharsets.UTF_8); > return gson.fromJson(streamReader, type); > } > > @Override > public boolean isWriteable(Class<?> type, Type genericType, Annotation[] > annotations, MediaType mediaType) { > return true; > } > > @Override > public long getSize(T t, Class<?> type, Type genericType, Annotation[] > annotations, MediaType mediaType) { > return -1; > } > > @Override > public void writeTo(T t, Class<?> type, Type genericType, Annotation[] > annotations, > MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, > OutputStream entityStream) throws IOException, WebApplicationException { > OutputStreamWriter writer = new OutputStreamWriter(entityStream, > StandardCharsets.UTF_8); > gson.toJson(t, writer); > writer.flush(); //This line is the path to success! > } > > } > > > > > -- > View this message in context: > http://tomee-openejb.979440.n4.nabble.com/TomEE-JAX-RS-MessageBodyWriter-Reader-not-working-like-the-standard-tp4672454p4672455.html > Sent from the TomEE Users mailing list archive at Nabble.com.
