use an ObjectInputStream for deserialization that has a configurable class loader for use in OSGi context

This commit is contained in:
Axel Uhl
2012-04-18 14:02:11 +02:00
parent 12f7ae5e4a
commit bb20b56139
4 changed files with 30 additions and 1 deletions
@@ -11,6 +11,7 @@ import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.test.mock.MockedTrackedRace;
public class MockedTrackedRaceWithFixedRank extends MockedTrackedRace {
private static final long serialVersionUID = -8587203762630194172L;
private final int rank;
private final boolean started;
private final RaceDefinition raceDefinition;
@@ -9,6 +9,7 @@ import com.sap.sailing.domain.base.Course;
import com.sap.sailing.domain.base.RaceDefinition;
public class MockedTrackedRaceWithFixedRankAndManyCompetitors extends MockedTrackedRaceWithFixedRank {
private static final long serialVersionUID = -6189437610363552577L;
private final Set<Competitor> competitors;
private final RaceDefinition raceDefinition;
@@ -29,6 +29,7 @@ import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sailing.domain.tractracadapter.ReceiverType;
import com.sap.sailing.util.ObjectInputStreamWithConfigurableClassLoader;
public class SerializationTest extends OnlineTracTracBasedTest {
public SerializationTest() throws MalformedURLException, URISyntaxException {
@@ -70,7 +71,7 @@ public class SerializationTest extends OnlineTracTracBasedTest {
}
}
}.start();
ObjectInputStream dis = new ObjectInputStream(pis);
ObjectInputStream dis = new ObjectInputStreamWithConfigurableClassLoader(pis, getClass().getClassLoader());
@SuppressWarnings("unchecked")
T result = (T) dis.readObject();
dis.close();
@@ -0,0 +1,26 @@
package com.sap.sailing.util;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
import java.io.StreamCorruptedException;
public class ObjectInputStreamWithConfigurableClassLoader extends ObjectInputStream {
private final ClassLoader loader;
public ObjectInputStreamWithConfigurableClassLoader(InputStream in, ClassLoader loader) throws IOException, StreamCorruptedException {
super(in);
assert loader != null;
if (loader == null) {
throw new IllegalArgumentException("Illegal null argument to ObjectInputStreamWithLoader");
}
this.loader = loader;
}
@Override
protected Class<?> resolveClass(ObjectStreamClass classDesc) throws IOException, ClassNotFoundException {
String className = classDesc.getName();
return loader.loadClass(className);
}
}