Example usage for com.google.gwt.user.server.rpc.impl SerializabilityUtil hasCustomFieldSerializer

List of usage examples for com.google.gwt.user.server.rpc.impl SerializabilityUtil hasCustomFieldSerializer

Introduction

In this page you can find the example usage for com.google.gwt.user.server.rpc.impl SerializabilityUtil hasCustomFieldSerializer.

Prototype

public static Class<?> hasCustomFieldSerializer(Class<?> instanceType) 

Source Link

Document

Returns the Class which can serialize the given instance type, or null if this class has no custom field serializer.

Usage

From source file:com.gdevelop.gwt.syncrpc.SyncClientSerializationStreamReader.java

License:Apache License

protected Object deserialize(String typeSignature) throws SerializationException {
    Object instance = null;//from  w  w w.  j  a v a2  s  .c o  m
    SerializedInstanceReference serializedInstRef = SerializabilityUtil
            .decodeSerializedInstanceReference(typeSignature);
    try {
        // Class<?> instanceClass =
        // Class.forName(serializedInstRef.getName(),
        // false, null);
        String cn = serializedInstRef.getName();
        Class<?> instanceClass = getClassCached(cn);
        assert (serializationPolicy != null);
        try {
            serializationPolicy.validateDeserialize(instanceClass);
        } catch (SerializationException e) {
            System.err.println("WARN: " + e.getMessage());
        }
        // TODO validateTypeVersions(instanceClass, serializedInstRef);
        Class<?> customSerializer = SerializabilityUtil.hasCustomFieldSerializer(instanceClass);
        int index = reserveDecodedObjectIndex();
        instance = instantiate(customSerializer, instanceClass);
        rememberDecodedObject(index, instance);
        Object replacement = deserializeImpl(customSerializer, instanceClass, instance);
        // It's possible that deserializing an object requires the original
        // proxy
        // object to be replaced.
        if (instance != replacement) {
            rememberDecodedObject(index, replacement);
            instance = replacement;
        }
        return instance;
    } catch (ClassNotFoundException e) {
        throw new SerializationException(e);
    } catch (InstantiationException e) {
        throw new SerializationException(e);
    } catch (IllegalAccessException e) {
        throw new SerializationException(e);
    } catch (IllegalArgumentException e) {
        throw new SerializationException(e);
    } catch (InvocationTargetException e) {
        throw new SerializationException(e);
    } catch (NoSuchMethodException e) {
        throw new SerializationException(e);
    }
}

From source file:com.gdevelop.gwt.syncrpc.SyncClientSerializationStreamReader.java

License:Apache License

private void deserializeClass(Class<?> instanceClass, Object instance) throws SerializationException,
        IllegalAccessException, NoSuchMethodException, InvocationTargetException, ClassNotFoundException {
    Set<String> clientFieldNames = serializationPolicy.getClientFieldNamesForEnhancedClass(instanceClass);
    if (clientFieldNames != null) {
        readString();// and toss...
    }/*w  w  w  . ja  v a  2 s.  c  om*/
    Field[] serializableFields = SerializabilityUtil.applyFieldSerializationPolicy(instanceClass);
    for (Field declField : serializableFields) {
        assert (declField != null);
        Object value = deserializeValue(declField.getType());
        boolean isAccessible = declField.isAccessible();
        boolean needsAccessOverride = !isAccessible && !Modifier.isPublic(declField.getModifiers());
        if (needsAccessOverride) {
            // Override access restrictions
            declField.setAccessible(true);
        }
        declField.set(instance, value);
    }
    Class<?> superClass = instanceClass.getSuperclass();
    if (serializationPolicy.shouldDeserializeFields(superClass)) {
        deserializeImpl(SerializabilityUtil.hasCustomFieldSerializer(superClass), superClass, instance);
    }
}

From source file:com.gdevelop.gwt.syncrpc.SyncClientSerializationStreamWriter.java

License:Apache License

/**
 * @see com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter#serializeImpl
 * @param instance/*from  w  ww  .ja va2 s. co m*/
 * @param instanceClass
 * @throws SerializationException
 */
private void serializeImpl(Object instance, Class<?> instanceClass) throws SerializationException {
    assert (instance != null);

    Class<?> customSerializer = SerializabilityUtil.hasCustomFieldSerializer(instanceClass);
    if (customSerializer != null) {
        // Use custom field serializer
        serializeWithCustomSerializer(customSerializer, instance, instanceClass);
    } else if (instanceClass.isArray()) {
        serializeArray(instanceClass, instance);
    } else if (instanceClass.isEnum()) {
        writeInt(((Enum<?>) instance).ordinal());
    } else {
        // Regular class instance
        serializeClass(instance, instanceClass);
    }
}

From source file:com.google.gwt.sample.dynatable.utils.ServerSerializationStreamWriter_2_0_1.java

License:Apache License

private void serializeImpl(Object instance, Class<?> instanceClass) throws SerializationException {
    assert (instance != null);

    Class<?> customSerializer = SerializabilityUtil.hasCustomFieldSerializer(instanceClass);
    if (customSerializer != null) {
        // Use custom field serializer
        serializeWithCustomSerializer(customSerializer, instance, instanceClass);
    } else if (instanceClass.isArray()) {
        serializeArray(instanceClass, instance);
    } else if (instanceClass.isEnum()) {
        writeInt(((Enum<?>) instance).ordinal());
    } else {/*from  w w w . ja  va  2  s  .c  o  m*/
        // Regular class instance
        serializeClass(instance, instanceClass);
    }
}

From source file:de.novanic.eventservice.service.connection.strategy.connector.streaming.EventSerializationPolicy.java

License:Open Source License

/**
 * Checks if the class is serializable (when the class extends from IsSerializable or Serializable, has a custom field serializer,
 * is a primitive or is an array which fulfills these conditions).
 * @param aClass class to check/* w  ww .j  a v a 2  s .com*/
 * @return true when the class is serializable
 */
private boolean isValid(Class<?> aClass) {
    if (aClass.isArray()) {
        return isValid(aClass.getComponentType());
    }
    return aClass.isPrimitive() || Serializable.class.isAssignableFrom(aClass)
            || IsSerializable.class.isAssignableFrom(aClass)
            || SerializabilityUtil.hasCustomFieldSerializer(aClass) != null;
}

From source file:fr.putnami.pwt.core.service.server.service.CommandSerializationPolicy.java

License:Open Source License

private boolean isInstantiable(Class<?> clazz) {
    if (clazz.isPrimitive()) {
        return true;
    }//from www. j a  v a2  s .c o m
    if (clazz.isEnum()) {
        return true;
    }
    if (Throwable.class.isAssignableFrom(clazz)) {
        return true;
    }
    if (clazz.isArray()) {
        return this.isInstantiable(clazz.getComponentType());
    }
    if (IsSerializable.class.isAssignableFrom(clazz)) {
        return true;
    }
    if (Serializable.class.isAssignableFrom(clazz)) {
        return true;
    }
    return SerializabilityUtil.hasCustomFieldSerializer(clazz) != null;
}

From source file:org.gwtrpc4j.stream.JClientSerializationStreamReader.java

License:Apache License

@Override
protected Object deserialize(String typeSignature) throws SerializationException {
    Object instance = null;/*from  w  w w. j av  a  2 s. c om*/
    try {
        Class<?> instanceClass;
        if (hasFlags(FLAG_ELIDE_TYPE_NAMES)) {
            if (getSerializationPolicy() instanceof TypeNameObfuscator) {
                TypeNameObfuscator obfuscator = (TypeNameObfuscator) getSerializationPolicy();
                String instanceClassName = obfuscator.getClassNameForTypeId(typeSignature);
                instanceClass = Class.forName(instanceClassName, false, classLoader);
            } else {
                throw new SerializationException(
                        "The GWT module was compiled with RPC type name elision enabled, but "
                                + getSerializationPolicy().getClass().getName() + " does not implement "
                                + TypeNameObfuscator.class.getName());
            }
        } else {
            SerializedInstanceReference serializedInstRef = SerializabilityUtil
                    .decodeSerializedInstanceReference(typeSignature);
            instanceClass = Class.forName(serializedInstRef.getName(), false, classLoader);
            validateTypeVersions(instanceClass, serializedInstRef);
        }

        assert serializationPolicy != null;

        // TODO active the validateDeserialize Policy : read file from the
        // server
        // serializationPolicy.validateDeserialize(instanceClass);

        Class<?> customSerializer = SerializabilityUtil.hasCustomFieldSerializer(instanceClass);

        int index = reserveDecodedObjectIndex();

        instance = instantiate(customSerializer, instanceClass);

        rememberDecodedObject(index, instance);

        Object replacement = deserializeImpl(customSerializer, instanceClass, instance);

        // It's possible that deserializing an object requires the original
        // proxy
        // object to be replaced.
        if (instance != replacement) {
            rememberDecodedObject(index, replacement);
            instance = replacement;
        }

        return instance;

    } catch (ClassNotFoundException e) {
        throw new SerializationException(e);
    } catch (InstantiationException e) {
        throw new SerializationException(e);
    } catch (IllegalAccessException e) {
        throw new SerializationException(e);
    } catch (IllegalArgumentException e) {
        throw new SerializationException(e);
    } catch (InvocationTargetException e) {
        throw new SerializationException(e.getTargetException());
    } catch (NoSuchMethodException e) {
        throw new SerializationException(e);
    }
}

From source file:org.gwtrpc4j.stream.JClientSerializationStreamReader.java

License:Apache License

private void deserializeClass(Class<?> instanceClass, Object instance) throws SerializationException,
        IllegalAccessException, NoSuchMethodException, InvocationTargetException, ClassNotFoundException {
    /**//from   w w  w.j a v  a 2s  . c  om
     * A map from field names to corresponding setter methods. The reference
     * will be null for classes that do not require special handling for
     * server-only fields.
     */
    Map<String, Method> setters = null;

    /**
     * A list of fields of this class known to the client. If null, assume
     * the class is not enhanced and don't attempt to deal with server-only
     * fields.
     */
    Set<String> clientFieldNames = serializationPolicy.getClientFieldNamesForEnhancedClass(instanceClass);
    if (clientFieldNames != null) {
        // Read and set server-only instance fields encoded in the RPC data
        try {
            String encodedData = readString();
            if (encodedData != null) {
                byte[] serializedData = Base64Utils.fromBase64(encodedData);
                ByteArrayInputStream baos = new ByteArrayInputStream(serializedData);
                ObjectInputStream ois = new ObjectInputStream(baos);

                int count = ois.readInt();
                for (int i = 0; i < count; i++) {
                    String fieldName = (String) ois.readObject();
                    Object fieldValue = ois.readObject();
                    Field field = instanceClass.getDeclaredField(fieldName);
                    field.setAccessible(true);
                    field.set(instance, fieldValue);
                }
            }
        } catch (IOException e) {
            throw new SerializationException(e);
        } catch (NoSuchFieldException e) {
            throw new SerializationException(e);
        }

        setters = getSetters(instanceClass);
    }

    Field[] serializableFields = SerializabilityUtil.applyFieldSerializationPolicy(instanceClass);
    for (Field declField : serializableFields) {
        assert declField != null;
        if (clientFieldNames != null && !clientFieldNames.contains(declField.getName())) {
            continue;
        }

        Object value = deserializeValue(declField.getType());

        String fieldName = declField.getName();
        Method setter;
        /*
         * If setters is non-null and there is a setter method for the given
         * field, call the setter. Otherwise, set the field value directly.
         * For persistence APIs such as JDO, the setter methods have been
         * enhanced to manipulate additional object state, causing direct
         * field writes to fail to update the object state properly.
         */
        if (setters != null && (setter = setters.get(fieldName)) != null) {
            setter.invoke(instance, value);
        } else {
            boolean isAccessible = declField.isAccessible();
            boolean needsAccessOverride = !isAccessible && !Modifier.isPublic(declField.getModifiers());
            if (needsAccessOverride) {
                // Override access restrictions
                declField.setAccessible(true);
            }

            declField.set(instance, value);
        }
    }

    Class<?> superClass = instanceClass.getSuperclass();
    if (serializationPolicy.shouldDeserializeFields(superClass)) {
        deserializeImpl(SerializabilityUtil.hasCustomFieldSerializer(superClass), superClass, instance);
    }
}