我意识到这有点不稳定,但是我想使用Jersey客户端GenericMessage使用Java序列化作为“编组” 将Spring Integration发送到Jersey服务器。是否对此具有内置或贡献支持,还是我必须编写自己的MessageBodyReader / Writer?我试图在客户端请求的类型设置到两个“应用程序/ x-java的序列化对象”,并MediaType.APPLICATION_OCTET_STREAM_TYPE和它只是提供了常用的:
GenericMessage
MediaType.APPLICATION_OCTET_STREAM_TYPE
ClientHandlerException: A message body writer for Java type, class org.springframework.integration.message.GenericMessage, and MIME media type, application/x-java-serialized-object, was not found
谷歌和泽西岛用户指南都对这一主题感到奇怪。我也接受另一种方法,允许将任意内容发送GenericMessage到Jersey API。我不一定要进行序列化。似乎是处理具有任意有效负载类型的消息的最简单途径。
我仍然没有找到一个,显然也没有人知道,所以我使用Commons Lang的SerializationUtils编写了自己的快速实现来为我做些肮脏的工作:
import org.apache.commons.lang.SerializationUtils; import org.springframework.stereotype.Component; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyReader; import javax.ws.rs.ext.MessageBodyWriter; import javax.ws.rs.ext.Provider; import java.io.InputStream; import java.io.OutputStream; import java.io.Serializable; import java.lang.annotation.Annotation; import java.lang.reflect.Type; /** * Created with IntelliJ IDEA. * User: ryan * Date: 2/25/13 * Time: 2:07 PM */ @Component @Provider public class SerializationMessageBodyReaderAndWriter implements MessageBodyReader<Serializable>, MessageBodyWriter<Serializable> { public static final String APPLICATION_JAVA_SERIALIZED_OBJECT = "application/x-java-serialized-object"; public static final MediaType APPLICATION_JAVA_SERIALIZED_OBJECT_TYPE = MediaType.valueOf(APPLICATION_JAVA_SERIALIZED_OBJECT); @Override public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return mediaType.isCompatible(APPLICATION_JAVA_SERIALIZED_OBJECT_TYPE) && Serializable.class.isAssignableFrom(type); } @Override public Serializable readFrom(Class<Serializable> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) { return (Serializable) SerializationUtils.deserialize(entityStream); } @Override public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return mediaType.isCompatible(APPLICATION_JAVA_SERIALIZED_OBJECT_TYPE) && Serializable.class.isAssignableFrom(type); } @Override public long getSize(Serializable o, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return -1; } @Override public void writeTo(Serializable o, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) { SerializationUtils.serialize(o, entityStream); } }