While playing with SerializableProvider in RestEASY beta 3 I got errors due
to a MediaType being changed to
"application/x-java-serialized-object;charset=UTF-8" by a global servlet
Spring filter. Charset is useless but I think the @Provider should use
MediaType.isCompatible instead of String equels.

Here is the modification I made :

@Provider
@Produces(SerializableProvider.MIMETYPE)
@Consumes(SerializableProvider.MIMETYPE)
public class SerializableProvider implements
MessageBodyReader<Serializable>, MessageBodyWriter<Serializable> {
    /** Marshaller for Java serialized objects */
    public final static String MIMETYPE =
"application/x-java-serialized-object";
    /** Corresponding MediaType */
    public final static MediaType MEDIATYPE = new MediaType("application",
"x-java-serialized-object");

    @Override
    public boolean isWriteable(Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
        return Serializable.class.isAssignableFrom(type) &&
MEDIATYPE.isCompatible(mediaType);
    }

    @Override
    public long getSize(Serializable t, Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
        return -1;
    }

    @Override
    public void writeTo(Serializable t, Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType,
            MultivaluedMap<String, Object> httpHeaders, OutputStream
entityStream) throws IOException,
            WebApplicationException {
        BufferedOutputStream bos = new BufferedOutputStream(entityStream);
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(t);
        oos.close();
    }

    @Override
    public boolean isReadable(Class<?> type, Type genericType, Annotation[]
annotations, MediaType mediaType) {
        return Serializable.class.isAssignableFrom(type)
                && MEDIATYPE.isCompatible(mediaType);
    }

    @Override
    public Serializable readFrom(Class<Serializable> type, Type
genericType, Annotation[] annotations,
            MediaType mediaType, MultivaluedMap<String, String>
httpHeaders, InputStream entityStream)
            throws IOException, WebApplicationException {
        BufferedInputStream bis = new BufferedInputStream(entityStream);
        ObjectInputStream ois = new ObjectInputStream(bis);
        try {
            return Serializable.class.cast(ois.readObject());
        } catch (ClassNotFoundException e) {
            throw new WebApplicationException(e);
        }
    }
}
------------------------------------------------------------------------------
Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester  
Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the  
endpoint security space. For insight on selecting the right partner to 
tackle endpoint security challenges, access the full report. 
http://p.sf.net/sfu/symantec-dev2dev
_______________________________________________
Resteasy-users mailing list
Resteasy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/resteasy-users

Reply via email to