如何使用Java序列化?
我意识到这有点不RESTful,但我想使用Jersey客户端将Spring集成发送到Jersey服务器,使用Java序列化作为“编组”。是否有内置或contrib支持,或者我必须自己编写/?我尝试了两种方法,它只是给出了通常的结果:如何使用Java序列化?,java,jersey,spring-integration,Java,Jersey,Spring Integration,我意识到这有点不RESTful,但我想使用Jersey客户端将Spring集成发送到Jersey服务器,使用Java序列化作为“编组”。是否有内置或contrib支持,或者我必须自己编写/?我尝试了两种方法,它只是给出了通常的结果: ClientHandlerException: A message body writer for Java type, class org.springframework.integration.message.GenericMessage, an
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
谷歌和谷歌在这个问题上都出奇地沉默。我还接受另一种方式,允许向Jersey API发送任意
GenericMessage
。我不一定要搞序列化。这似乎是处理具有任意负载类型的消息的最简单的途径。我还没有找到,显然也没有其他人知道,因此我编写了自己的快速实现,使用来为我做一些肮脏的工作:
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);
}
}
import org.apache.commons.lang.SerializationUtils;
导入org.springframework.stereotype.Component;
导入javax.ws.rs.core.MediaType;
导入javax.ws.rs.core.MultivaluedMap;
导入javax.ws.rs.ext.MessageBodyReader;
导入javax.ws.rs.ext.MessageBodyWriter;
导入javax.ws.rs.ext.Provider;
导入java.io.InputStream;
导入java.io.OutputStream;
导入java.io.Serializable;
导入java.lang.annotation.annotation;
导入java.lang.reflect.Type;
/**
*使用IntelliJ IDEA创建。
*用户:ryan
*日期:2013年2月25日
*时间:下午二时零七分
*/
@组成部分
@提供者
公共类序列化MessageBodyReaderAndWriter
实现MessageBodyReader、MessageBodyWriter{
公共静态最终字符串应用程序\u JAVA\u序列化\u对象=
“应用程序/x-java-serialized-object”;
公共静态最终媒体类型应用程序\ JAVA\序列化\对象\类型=
valueOf(应用程序\ JAVA \序列化\对象);
@凌驾
公共布尔值可读取(类类型,
类型genericType,
注释[]注释,
媒体类型(媒体类型){
返回mediaType.isCompatible(应用程序\ JAVA \序列化\对象\类型)
&&Serializable.class.isAssignableFrom(类型);
}
@凌驾
公共可序列化的readFrom(类类型,
类型genericType,
注释[]注释,
MediaType MediaType,
多值MAP HttpHeader,
输入流(实体流){
返回(可序列化)SerializationUtils.deserialize(entityStream);
}
@凌驾
公共布尔值可写(类类型,
类型genericType,
注释[]注释,
媒体类型(媒体类型){
返回mediaType.isCompatible(应用程序\ JAVA \序列化\对象\类型)
&&Serializable.class.isAssignableFrom(类型);
}
@凌驾
公共长getSize(可序列化的o,
类类型,
类型genericType,
注释[]注释,
媒体类型(媒体类型){
返回-1;
}
@凌驾
公共无效写入(可序列化o,
类类型,
类型genericType,
注释[]注释,
MediaType MediaType,
多值MAP HttpHeader,
OutputStream(实体流){
SerializationUtils.serialize(o,entityStream);
}
}