Added 'IgnoreSerialization' annotation, so that fields with this annotation WILL NOT be serialized (by a kryo that has been setup to use the FieldAnnotationAwareSerializer
This commit is contained in:
parent
61e9862069
commit
7fd3cc18cf
|
@ -1,13 +1,18 @@
|
|||
package dorkbox.network.connection;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
|
||||
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
|
||||
import org.bouncycastle.crypto.params.IESParameters;
|
||||
import org.bouncycastle.crypto.params.IESWithCipherParameters;
|
||||
|
||||
import com.esotericsoftware.kryo.factories.SerializerFactory;
|
||||
|
||||
import dorkbox.network.ConnectionOptions;
|
||||
import dorkbox.network.connection.ping.PingListener;
|
||||
import dorkbox.network.connection.ping.PingMessage;
|
||||
|
@ -23,6 +28,8 @@ import dorkbox.network.util.KryoSerializationManager;
|
|||
import dorkbox.network.util.SerializationManager;
|
||||
import dorkbox.network.util.exceptions.InitializationException;
|
||||
import dorkbox.network.util.exceptions.SecurityException;
|
||||
import dorkbox.network.util.serializers.FieldAnnotationAwareSerializer;
|
||||
import dorkbox.network.util.serializers.IgnoreSerialization;
|
||||
import dorkbox.util.crypto.serialization.EccPrivateKeySerializer;
|
||||
import dorkbox.util.crypto.serialization.EccPublicKeySerializer;
|
||||
import dorkbox.util.crypto.serialization.IesParametersSerializer;
|
||||
|
@ -64,6 +71,13 @@ public class EndPointWithSerialization extends EndPoint {
|
|||
this.serializationManager.register(Registration.class);
|
||||
|
||||
|
||||
// ignore fields that have the "IgnoreSerialization" annotation.
|
||||
Set<Class<? extends Annotation>> marks = new HashSet<Class<? extends Annotation>>();
|
||||
marks.add(IgnoreSerialization.class);
|
||||
SerializerFactory disregardingFactory = new FieldAnnotationAwareSerializer.Factory(marks, true);
|
||||
this.serializationManager.setDefaultSerializer(disregardingFactory);
|
||||
|
||||
|
||||
// add the ping listener (internal use only!)
|
||||
this.connectionManager.add(new PingListener(name));
|
||||
|
||||
|
|
|
@ -20,7 +20,10 @@ import com.esotericsoftware.kryo.Kryo;
|
|||
import com.esotericsoftware.kryo.KryoException;
|
||||
import com.esotericsoftware.kryo.Registration;
|
||||
import com.esotericsoftware.kryo.Serializer;
|
||||
import com.esotericsoftware.kryo.factories.ReflectionSerializerFactory;
|
||||
import com.esotericsoftware.kryo.factories.SerializerFactory;
|
||||
import com.esotericsoftware.kryo.serializers.CollectionSerializer;
|
||||
import com.esotericsoftware.kryo.serializers.FieldSerializer;
|
||||
import com.esotericsoftware.kryo.util.MapReferenceResolver;
|
||||
|
||||
import dorkbox.network.connection.Connection;
|
||||
|
@ -228,6 +231,19 @@ public class KryoSerializationManager implements SerializationManager {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the serializer factory to use when no {@link #addDefaultSerializer(Class, Class) default serializers} match
|
||||
* an object's type. Default is {@link ReflectionSerializerFactory} with {@link FieldSerializer}.
|
||||
*
|
||||
* @see #newDefaultSerializer(Class)
|
||||
*/
|
||||
@Override
|
||||
public void setDefaultSerializer(SerializerFactory factory) {
|
||||
for (Kryo k : this.kryos) {
|
||||
k.setDefaultSerializer(factory);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If the class is not registered and {@link SerializationManager#setRegistrationRequired(boolean)} is false, it is
|
||||
* automatically registered using the {@link SerializationManager#addDefaultSerializer(Class, Class) default serializer}.
|
||||
|
@ -270,7 +286,9 @@ public class KryoSerializationManager implements SerializationManager {
|
|||
}
|
||||
|
||||
/**
|
||||
* attempt to allocate the given index. This MUST be wrapped in a synchronized call.!
|
||||
* attempt to allocate the given index.
|
||||
*
|
||||
* Note that this is not thread safe
|
||||
*/
|
||||
private final void allocateLazy(int index) {
|
||||
// keyed off the snappy instance
|
||||
|
|
|
@ -4,6 +4,7 @@ import io.netty.buffer.ByteBuf;
|
|||
|
||||
import com.esotericsoftware.kryo.Registration;
|
||||
import com.esotericsoftware.kryo.Serializer;
|
||||
import com.esotericsoftware.kryo.factories.SerializerFactory;
|
||||
|
||||
import dorkbox.network.connection.Connection;
|
||||
import dorkbox.network.rmi.RmiRegisterClassesCallback;
|
||||
|
@ -78,4 +79,8 @@ public class NullSerializationManager implements SerializationManager {
|
|||
@Override
|
||||
public void registerForRmiClasses(RmiRegisterClassesCallback callback) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultSerializer(SerializerFactory factory) {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,9 @@ import com.esotericsoftware.kryo.Kryo;
|
|||
import com.esotericsoftware.kryo.KryoException;
|
||||
import com.esotericsoftware.kryo.Registration;
|
||||
import com.esotericsoftware.kryo.Serializer;
|
||||
import com.esotericsoftware.kryo.factories.ReflectionSerializerFactory;
|
||||
import com.esotericsoftware.kryo.factories.SerializerFactory;
|
||||
import com.esotericsoftware.kryo.serializers.FieldSerializer;
|
||||
import com.esotericsoftware.kryo.util.MapReferenceResolver;
|
||||
|
||||
import dorkbox.network.connection.Connection;
|
||||
|
@ -166,6 +169,14 @@ public interface SerializationManager {
|
|||
*/
|
||||
public void registerForRmiClasses(RmiRegisterClassesCallback callback);
|
||||
|
||||
/**
|
||||
* Sets the serializer factory to use when no {@link #addDefaultSerializer(Class, Class) default serializers} match
|
||||
* an object's type. Default is {@link ReflectionSerializerFactory} with {@link FieldSerializer}.
|
||||
*
|
||||
* @see #newDefaultSerializer(Class)
|
||||
*/
|
||||
public void setDefaultSerializer(SerializerFactory factory);
|
||||
|
||||
/**
|
||||
* If the class is not registered and {@link SerializationManager#setRegistrationRequired(boolean)} is false, it is
|
||||
* automatically registered using the {@link SerializationManager#addDefaultSerializer(Class, Class) default serializer}.
|
||||
|
@ -175,4 +186,5 @@ public interface SerializationManager {
|
|||
* @see ClassResolver#getRegistration(Class)
|
||||
*/
|
||||
public Registration getRegistration(Class<?> clazz);
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue