Search in sources :

Example 11 with ObjectStreamField

use of java.io.ObjectStreamField in project robovm by robovm.

the class SerializationTest method testSerializeFieldMadeTransient.

// http://b/4471249
public void testSerializeFieldMadeTransient() throws Exception {
    // Does ObjectStreamClass have the right idea?
    ObjectStreamClass osc = ObjectStreamClass.lookup(FieldMadeTransient.class);
    ObjectStreamField[] fields = osc.getFields();
    assertEquals(1, fields.length);
    assertEquals("nonTransientInt", fields[0].getName());
    assertEquals(int.class, fields[0].getType());
    // this was created by serializing a FieldMadeTransient with a non-0 transientInt
    String s = "aced0005737200346c6962636f72652e6a6176612e696f2e53657269616c697a6174696f6e54657" + "374244669656c644d6164655472616e7369656e74000000000000000002000149000c7472616e736" + "9656e74496e747870abababab";
    FieldMadeTransient deserialized = (FieldMadeTransient) SerializationTester.deserializeHex(s);
    assertEquals(0, deserialized.transientInt);
}
Also used : ObjectStreamField(java.io.ObjectStreamField) ObjectStreamClass(java.io.ObjectStreamClass)

Example 12 with ObjectStreamField

use of java.io.ObjectStreamField in project Bytecoder by mirkosertic.

the class ObjectStreamClass method matchFields.

/**
 * Matches given set of serializable fields with serializable fields
 * obtained from the given local class descriptor (which contain bindings
 * to reflective Field objects).  Returns list of ObjectStreamFields in
 * which each ObjectStreamField whose signature matches that of a local
 * field contains a Field object for that field; unmatched
 * ObjectStreamFields contain null Field objects.  Shared/unshared settings
 * of the returned ObjectStreamFields also reflect those of matched local
 * ObjectStreamFields.  Throws InvalidClassException if unresolvable type
 * conflicts exist between the two sets of fields.
 */
private static ObjectStreamField[] matchFields(ObjectStreamField[] fields, ObjectStreamClass localDesc) throws InvalidClassException {
    ObjectStreamField[] localFields = (localDesc != null) ? localDesc.fields : NO_FIELDS;
    /*
         * Even if fields == localFields, we cannot simply return localFields
         * here.  In previous implementations of serialization,
         * ObjectStreamField.getType() returned Object.class if the
         * ObjectStreamField represented a non-primitive field and belonged to
         * a non-local class descriptor.  To preserve this (questionable)
         * behavior, the ObjectStreamField instances returned by matchFields
         * cannot report non-primitive types other than Object.class; hence
         * localFields cannot be returned directly.
         */
    ObjectStreamField[] matches = new ObjectStreamField[fields.length];
    for (int i = 0; i < fields.length; i++) {
        ObjectStreamField f = fields[i], m = null;
        for (int j = 0; j < localFields.length; j++) {
            ObjectStreamField lf = localFields[j];
            if (f.getName().equals(lf.getName())) {
                if ((f.isPrimitive() || lf.isPrimitive()) && f.getTypeCode() != lf.getTypeCode()) {
                    throw new InvalidClassException(localDesc.name, "incompatible types for field " + f.getName());
                }
                if (lf.getField() != null) {
                    m = new ObjectStreamField(lf.getField(), lf.isUnshared(), false);
                } else {
                    m = new ObjectStreamField(lf.getName(), lf.getSignature(), lf.isUnshared());
                }
            }
        }
        if (m == null) {
            m = new ObjectStreamField(f.getName(), f.getSignature(), false);
        }
        m.setOffset(f.getOffset());
        matches[i] = m;
    }
    return matches;
}
Also used : ObjectStreamField(java.io.ObjectStreamField)

Example 13 with ObjectStreamField

use of java.io.ObjectStreamField in project Bytecoder by mirkosertic.

the class ObjectStreamClass method getDeclaredSerialFields.

/**
 * Returns serializable fields of given class as defined explicitly by a
 * "serialPersistentFields" field, or null if no appropriate
 * "serialPersistentFields" field is defined.  Serializable fields backed
 * by an actual field of the class are represented by ObjectStreamFields
 * with corresponding non-null Field objects.  For compatibility with past
 * releases, a "serialPersistentFields" field with a null value is
 * considered equivalent to not declaring "serialPersistentFields".  Throws
 * InvalidClassException if the declared serializable fields are
 * invalid--e.g., if multiple fields share the same name.
 */
private static ObjectStreamField[] getDeclaredSerialFields(Class<?> cl) throws InvalidClassException {
    ObjectStreamField[] serialPersistentFields = null;
    try {
        Field f = cl.getDeclaredField("serialPersistentFields");
        int mask = Modifier.PRIVATE | Modifier.STATIC | Modifier.FINAL;
        if ((f.getModifiers() & mask) == mask) {
            f.setAccessible(true);
            serialPersistentFields = (ObjectStreamField[]) f.get(null);
        }
    } catch (Exception ex) {
    }
    if (serialPersistentFields == null) {
        return null;
    } else if (serialPersistentFields.length == 0) {
        return NO_FIELDS;
    }
    ObjectStreamField[] boundFields = new ObjectStreamField[serialPersistentFields.length];
    Set<String> fieldNames = new HashSet<>(serialPersistentFields.length);
    for (int i = 0; i < serialPersistentFields.length; i++) {
        ObjectStreamField spf = serialPersistentFields[i];
        String fname = spf.getName();
        if (fieldNames.contains(fname)) {
            throw new InvalidClassException("multiple serializable fields named " + fname);
        }
        fieldNames.add(fname);
        try {
            Field f = cl.getDeclaredField(fname);
            if ((f.getType() == spf.getType()) && ((f.getModifiers() & Modifier.STATIC) == 0)) {
                boundFields[i] = new ObjectStreamField(f, spf.isUnshared(), true);
            }
        } catch (NoSuchFieldException ex) {
        }
        if (boundFields[i] == null) {
            boundFields[i] = new ObjectStreamField(fname, spf.getType(), spf.isUnshared());
        }
    }
    return boundFields;
}
Also used : ObjectStreamField(java.io.ObjectStreamField) Field(java.lang.reflect.Field) ObjectStreamField(java.io.ObjectStreamField) InvocationTargetException(java.lang.reflect.InvocationTargetException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) HashSet(java.util.HashSet)

Example 14 with ObjectStreamField

use of java.io.ObjectStreamField in project j2objc by google.

the class OldObjectStreamFieldTest method test_ConstructorLjava_lang_StringLjava_lang_Class.

public void test_ConstructorLjava_lang_StringLjava_lang_Class() {
    ObjectStreamField osf = new ObjectStreamField("aField", int.class);
    assertTrue("Test 1: Name member not set correctly.", osf.getName().equals("aField"));
    assertTrue("Test 2: Type member not set correctly.", osf.getType().equals(int.class));
    // Repeat the tests with a different object to make sure
    // that we have not tested against default values.
    osf = new ObjectStreamField("anotherField", String.class);
    assertTrue("Test 3: Name member not set correctly.", osf.getName().equals("anotherField"));
    assertTrue("Test 4: Type member not set correctly.", osf.getType().equals(String.class));
    // Invalid argument tests.
    try {
        osf = new ObjectStreamField(null, boolean.class);
        fail("Test 5: NullPointerException expected.");
    } catch (NullPointerException e) {
    // Expected.
    }
    try {
        osf = new ObjectStreamField("thisField", null);
        fail("Test 6: NullPointerException expected.");
    } catch (NullPointerException e) {
    // Expected.
    }
}
Also used : ObjectStreamField(java.io.ObjectStreamField)

Example 15 with ObjectStreamField

use of java.io.ObjectStreamField in project j2objc by google.

the class SerializationTest method testSerializeFieldMadeTransient.

// http://b/4471249
public void testSerializeFieldMadeTransient() throws Exception {
    // Does ObjectStreamClass have the right idea?
    ObjectStreamClass osc = ObjectStreamClass.lookup(FieldMadeTransient.class);
    ObjectStreamField[] fields = osc.getFields();
    assertEquals(1, fields.length);
    assertEquals("nonTransientInt", fields[0].getName());
    assertEquals(int.class, fields[0].getType());
    // this was created by serializing a FieldMadeTransient with a non-0 transientInt
    String s = "aced0005737200346c6962636f72652e6a6176612e696f2e53657269616c697a6174696f6e54657" + "374244669656c644d6164655472616e7369656e74000000000000000002000149000c7472616e736" + "9656e74496e747870abababab";
    FieldMadeTransient deserialized = (FieldMadeTransient) SerializationTester.deserializeHex(s);
    assertEquals(0, deserialized.transientInt);
}
Also used : ObjectStreamField(java.io.ObjectStreamField) ObjectStreamClass(java.io.ObjectStreamClass)

Aggregations

ObjectStreamField (java.io.ObjectStreamField)19 ObjectStreamClass (java.io.ObjectStreamClass)7 Field (java.lang.reflect.Field)4 ByteArrayInputStream (java.io.ByteArrayInputStream)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)2 ObjectOutputStream (java.io.ObjectOutputStream)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)2 Externalizable (java.io.Externalizable)1 ObjectInputStream (java.io.ObjectInputStream)1 Serializable (java.io.Serializable)1 Method (java.lang.reflect.Method)1 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)1 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 HashSet (java.util.HashSet)1 SortedSet (java.util.SortedSet)1 TreeSet (java.util.TreeSet)1 WicketRuntimeException (org.apache.wicket.WicketRuntimeException)1