Serializer.registerClass - UUID

Information: Registered class[-48]:class java.util.UUID to:com.jme3.network.serializing.serializers.FieldSerializer@5789f3
Exception in thread “main” java.lang.RuntimeException: Registration error: no-argument constructor not found on:class java.util.UUID
at com.jme3.network.serializing.serializers.FieldSerializer.checkClass(FieldSerializer.java:59)
at com.jme3.network.serializing.serializers.FieldSerializer.initialize(FieldSerializer.java:65)
at com.jme3.network.serializing.Serializer.registerClass(Serializer.java:275)
at com.jme3.network.serializing.Serializer.getSerializerRegistration(Serializer.java:330)
at com.jme3.network.serializing.Serializer.getSerializer(Serializer.java:289)
at com.jme3.network.serializing.serializers.FieldSerializer.initialize(FieldSerializer.java:99)
at com.jme3.network.serializing.Serializer.registerClass(Serializer.java:275)

is there a way to use UUID too?

Yes, you would have to create your own Serializer and register it for the class.

FieldSerializer uses reflection to set the fields on the object and so must be able to construct it first… with a no-arg constructor.

thanks, it work!
maybe anyone is interested


import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.UUID;

import com.jme3.network.serializing.Serializer;

public class UUIDSerializer extends Serializer
{
	@Override
	public <T> T readObject(ByteBuffer data, Class<T> c) throws IOException
	{
		byte[] uuid = new byte[36];
		data.get(uuid);

		return (T) UUID.fromString(new String(uuid));
	}

	@Override
	public void writeObject(ByteBuffer buffer, Object object) throws IOException
	{
		UUID uuid = (UUID) object;
		buffer.put(uuid.toString().getBytes());
	}
}

I think this must be more efficient:

public class UUIDSerializer extends Serializer {

    @Override
    public <T> T readObject(ByteBuffer data, Class<T> c) throws IOException {
        return (T) new UUID(data.getLong(), data.getLong());
    }

    @Override
    public void writeObject(ByteBuffer buffer, Object object) throws IOException {
        UUID uuid = (UUID) object;
        
        buffer.putLong(uuid.getMostSignificantBits());
        buffer.putLong(uuid.getLeastSignificantBits());
    }

}