List of usage examples for com.google.gwt.user.server.rpc.impl SerializabilityUtil hasCustomFieldSerializer
public static Class<?> hasCustomFieldSerializer(Class<?> instanceType)
null if this class has no custom field serializer. 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); } }