Ok, this happened again...
For some unknown reason the list strips my attachments if they are not
with txt extension...

I'm using Outlook XP (and except for the crashing I haven't seen any
problems with it)...

Here is the attachment again..

-- dimiter


> -----Original Message-----
> From: Dimiter Dimitrov [mailto:[EMAIL PROTECTED]] 
> Sent: Tuesday, February 04, 2003 8:42 PM
> To: 'Jakarta Commons Developers List'
> Subject: [beanutils][lang] how to serialize/deserialize 
> Methods/PropertyDescriptors
> 
> 
> Hi all,
> 
> Currently I'm in process of replacing most of our util 
> classes with Jakarta-Commons.
> 
> But I can't find a way to serialize Method instance.  I have 
> looked in commons.lang and  commons.beanutils packages.
> 
> I'm attaching a possible solution. Don't know if it's not out 
> of scope though..
> 
> cheers,
> Dimiter
> 
> 
import java.io.ObjectOutput;
import java.io.IOException;
import java.io.ObjectInput;
import java.lang.reflect.Method;
import java.beans.PropertyDescriptor;

public class SerializationUtils {
    /**
     * @param method can be null
     *
     * @serialData declaringClassName:Object
     * @serialData methodName:UTF string
     * @serialData methodParameterTypes:Object[]
     */
    public static void writeMethod(ObjectOutput out, Method method) throws IOException 
{
        if (method==null) {
            out.writeObject(null);
            return;
        }

        out.writeObject(method.getDeclaringClass().getName());
        out.writeUTF(method.getName());
        Class[] paramTypes = method.getParameterTypes();
        String[] paramTypeNames = new String[paramTypes.length];
        for (int i = 0; i < paramTypeNames.length; i++) {
            paramTypeNames[i] = paramTypes[i].getName();
        }
        out.writeObject(paramTypeNames);
    }

    public static Method readMethod(ObjectInput in) throws IOException {
        try {
            final String className = (String) in.readObject();
            if (className == null) return null;

            Class cls = Class.forName(className);
            final String methodName = in.readUTF();
            final String[] paramTypeNames = (String[]) in.readObject();
            final Class[] paramTypes = new Class[paramTypeNames.length];
            for (int i = 0; i < paramTypeNames.length; i++) {
                paramTypes[i] = typeForName(paramTypeNames[i]);
            }
            return cls.getMethod(methodName, paramTypes);
        } catch (IOException e) {
            throw e;
        } catch (Exception e) {
            throw new IOException("Method deserialization failed: " + e);
        }
    }


    /**
     * @serialData propertyName:UTF string
     * @serialData getter:Method
     * @serialData setter:Method
     */
    public static void writePropertyDescriptorMethods(ObjectOutput out, 
PropertyDescriptor pd) throws IOException {
        out.writeUTF(pd.getName());
        writeMethod(out, pd.getReadMethod());
        writeMethod(out, pd.getWriteMethod());
    }

    public static PropertyDescriptor readPropertyDescriptorMethods(ObjectInput in) 
throws IOException {
        String propertyName = in.readUTF();
        try {
            Method getter = readMethod(in);
            Method setter = readMethod(in);
            return new PropertyDescriptor(propertyName, getter, setter);
        } catch (IOException e) {
            throw e;
        } catch (Exception e) {
            throw new IOException("Property deserialization failed: "+e);
        }
    }

    /**
     * @serialData propertyName:UTF string
     * @serialData beanClass:Class
     */
    public static void writePropertyDescriptorBean(ObjectOutput out, 
PropertyDescriptor pd, Class beanClass) throws IOException {
        out.writeUTF(pd.getName());
        out.writeObject(beanClass);
    }

    public static PropertyDescriptor readPropertyDescriptorBean(ObjectInput in) throws 
IOException {
        try {
            String propertyName = in.readUTF();
            Class beanClass = (Class) in.readObject();
            return new PropertyDescriptor(propertyName, beanClass);
        } catch (IOException e) {
            throw e;
        } catch (Exception e) {
            throw new IOException("Property deserialization failed: " + e);
        }
    }


    public static Class primitive2refType(Class type) {
        if (type.equals(byte.class)) return Byte.class;
        if (type.equals(short.class)) return Short.class;
        if (type.equals(int.class)) return Integer.class;
        if (type.equals(long.class)) return Long.class;
        if (type.equals(char.class)) return Character.class;

        if (type.equals(float.class)) return Float.class;
        if (type.equals(double.class)) return Double.class;

        if (type.equals(boolean.class)) return Boolean.class;

        if (type.equals(void.class)) return Void.class;

        return type;
    }

    public static Class ref2primitiveType(Class type) {
        if (type.equals(Byte.class)) return byte.class;
        if (type.equals(Short.class)) return short.class;
        if (type.equals(Integer.class)) return int.class;
        if (type.equals(Long.class)) return long.class;
        if (type.equals(Character.class)) return char.class;

        if (type.equals(Float.class)) return float.class;
        if (type.equals(Double.class)) return double.class;

        if (type.equals(Boolean.class)) return boolean.class;

        if (type.equals(Void.class)) return void.class;

        return type;
    }

    public static Class typeForName(String type) throws ClassNotFoundException {
        if (type.equals("byte")) return byte.class;
        if (type.equals("short")) return short.class;
        if (type.equals("int")) return int.class;
        if (type.equals("long")) return long.class;
        if (type.equals("char")) return char.class;

        if (type.equals("float")) return float.class;
        if (type.equals("double")) return double.class;

        if (type.equals("boolean")) return boolean.class;

        if (type.equals("void")) return void.class;

        return Class.forName(type);
    }

}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to