List of usage examples for com.google.gwt.user.server.rpc.impl SerializabilityUtil applyFieldSerializationPolicy
public static Field[] applyFieldSerializationPolicy(Class<?> clazz)
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 . j ava2 s. co m*/ 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
private void serializeClass(Object instance, Class<?> instanceClass) throws SerializationException { assert (instance != null); Set<String> clientFieldNames = serializationPolicy.getClientFieldNamesForEnhancedClass(instanceClass); if (clientFieldNames != null) { writeString(null);/* w w w .j av a2 s . com*/ } Field[] serializableFields = SerializabilityUtil.applyFieldSerializationPolicy(instanceClass); for (Field declField : serializableFields) { assert (declField != null); boolean isAccessible = declField.isAccessible(); boolean needsAccessOverride = !isAccessible && !Modifier.isPublic(declField.getModifiers()); if (needsAccessOverride) { // Override the access restrictions declField.setAccessible(true); } Object value; try { value = declField.get(instance); serializeValue(value, declField.getType()); } catch (IllegalArgumentException e) { throw new SerializationException(e); } catch (IllegalAccessException e) { throw new SerializationException(e); } } Class<?> superClass = instanceClass.getSuperclass(); if (serializationPolicy.shouldSerializeFields(superClass)) { serializeImpl(instance, superClass); } }
From source file:com.google.gwt.sample.dynatable.utils.ServerSerializationStreamWriter_2_0_1.java
License:Apache License
private void serializeClass(Object instance, Class<?> instanceClass) throws SerializationException { assert (instance != null); Field[] serializableFields = SerializabilityUtil.applyFieldSerializationPolicy(instanceClass); /**/* www.j a v a 2s. co m*/ * If clientFieldNames is non-null, identify any additional server-only fields and serialize * them separately. Java serialization is used to construct a byte array, which is encoded * as a String and written prior to the rest of the field data. */ Set<String> clientFieldNames = serializationPolicy.getClientFieldNamesForEnhancedClass(instanceClass); if (clientFieldNames != null) { List<Field> serverFields = new ArrayList<Field>(); for (Field declField : serializableFields) { assert (declField != null); // Identify server-only fields if (!clientFieldNames.contains(declField.getName())) { serverFields.add(declField); continue; } } // Serialize the server-only fields into a byte array and encode as a String try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeInt(serverFields.size()); for (Field f : serverFields) { oos.writeObject(f.getName()); f.setAccessible(true); Object fieldData = f.get(instance); oos.writeObject(fieldData); } oos.close(); byte[] serializedData = baos.toByteArray(); String encodedData = Base64Utils.toBase64(serializedData); writeString(encodedData); } catch (IllegalAccessException e) { throw new SerializationException(e); } catch (IOException e) { throw new SerializationException(e); } } // Write the client-visible field data for (Field declField : serializableFields) { if ((clientFieldNames != null) && !clientFieldNames.contains(declField.getName())) { // Skip server-only fields continue; } boolean isAccessible = declField.isAccessible(); boolean needsAccessOverride = !isAccessible && !Modifier.isPublic(declField.getModifiers()); if (needsAccessOverride) { // Override the access restrictions declField.setAccessible(true); } Object value; try { value = declField.get(instance); serializeValue(value, declField.getType()); } catch (IllegalArgumentException e) { throw new SerializationException(e); } catch (IllegalAccessException e) { throw new SerializationException(e); } } Class<?> superClass = instanceClass.getSuperclass(); if (serializationPolicy.shouldSerializeFields(superClass)) { serializeImpl(instance, superClass); } }
From source file:org.gwtrpc4j.stream.JClientSerializationStreamReader.java
License:Apache License
private void deserializeClass(Class<?> instanceClass, Object instance) throws SerializationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ClassNotFoundException { /**/*ww w .j av a2 s. c o m*/ * 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); } }