package rocks.inspectit.ui.rcp.repository.service.cmr; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.springframework.remoting.httpinvoker.SimpleHttpInvokerRequestExecutor; 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; import rocks.inspectit.ui.rcp.InspectIT; /** * This class extends the simple http one by using Kryo for (de-)serializing. * * @author Patrice Bouillet * */ public class KryoSimpleHttpInvokerRequestExecutor extends SimpleHttpInvokerRequestExecutor { /** * The serialization manager provider. */ private SerializationManagerProvider serializationManagerProvider; /** * {@inheritDoc} */ @Override protected void writeRemoteInvocation(RemoteInvocation invocation, OutputStream os) throws IOException { try (Output output = new Output(os)) { ISerializer serializer = serializationManagerProvider.createSerializer(); serializer.serialize(invocation, output); } catch (SerializationException e) { InspectIT.getDefault().createErrorDialog(e.getMessage(), e, -1); throw new IOException(e); } } /** * {@inheritDoc} */ @Override protected RemoteInvocationResult readRemoteInvocationResult(InputStream is, String codebaseUrl) throws IOException, ClassNotFoundException { try (Input input = new Input(is)) { ISerializer serializer = serializationManagerProvider.createSerializer(); return (RemoteInvocationResult) serializer.deserialize(input); } catch (SerializationException e) { InspectIT.getDefault().createErrorDialog(e.getMessage(), e, -1); throw new IOException(e); } } /** * Gets {@link #serializationManagerProvider}. * * @return {@link #serializationManagerProvider} */ public SerializationManagerProvider getSerializationManagerProvider() { return serializationManagerProvider; } /** * Sets {@link #serializationManagerProvider}. * * @param serializationManagerProvider * New value for {@link #serializationManagerProvider} */ public void setSerializationManagerProvider(SerializationManagerProvider serializationManagerProvider) { this.serializationManagerProvider = serializationManagerProvider; } }