package rocks.inspectit.server.spring.exporter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter; import org.springframework.remoting.support.RemoteInvocation; import org.springframework.remoting.support.RemoteInvocationResult; import com.esotericsoftware.kryo.io.Input; import com.esotericsoftware.kryo.io.Output; import rocks.inspectit.shared.all.serializer.ISerializer; import rocks.inspectit.shared.all.serializer.SerializationException; import rocks.inspectit.shared.all.serializer.provider.SerializationManagerProvider; /** * This service exporter using kryo for (de-)serialization is nearly the same as the one with plain * java serialization. * * @author Patrice Bouillet * */ public class KryoHttpInvokerServiceExporter extends HttpInvokerServiceExporter { /** * The serialization manager. */ @Autowired private SerializationManagerProvider serializationManagerProvider; /** * {@inheritDoc} */ @Override protected RemoteInvocation readRemoteInvocation(HttpServletRequest request, InputStream is) throws IOException, ClassNotFoundException { try (Input input = new Input(is)) { ISerializer serializer = serializationManagerProvider.createSerializer(); return (RemoteInvocation) serializer.deserialize(input); } catch (SerializationException e) { throw new IOException(e); } } /** * {@inheritDoc} */ @Override protected void writeRemoteInvocationResult(HttpServletRequest request, HttpServletResponse response, RemoteInvocationResult result, OutputStream os) throws IOException { try (Output output = new Output(os)) { if (!result.hasException()) { Object value = result.getValue(); result = new RemoteInvocationResult(value); } ISerializer serializer = serializationManagerProvider.createSerializer(); serializer.serialize(result, output); } catch (SerializationException e) { throw new IOException(e); } } }