You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cd...@apache.org on 2017/04/16 22:32:12 UTC
[21/72] [abbrv] [partial] flex-blazeds git commit: - Major code scrub
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/BeanProxy.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/BeanProxy.java b/core/src/flex/messaging/io/BeanProxy.java
deleted file mode 100644
index 05ccb01..0000000
--- a/core/src/flex/messaging/io/BeanProxy.java
+++ /dev/null
@@ -1,936 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package flex.messaging.io;
-
-import flex.messaging.MessageException;
-import flex.messaging.io.amf.ASObject;
-import flex.messaging.log.Log;
-import flex.messaging.log.Logger;
-import flex.messaging.util.ClassUtil;
-import flex.messaging.util.ExceptionUtil;
-
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.io.File;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.AbstractCollection;
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-/**
- * Uses Bean introspection to collect the properties for a given instance.
- */
-public class BeanProxy extends AbstractProxy
-{
- static final long serialVersionUID = 7365078101695257715L;
-
- private static final int FAILED_PROPERTY_READ_ERROR = 10021;
- private static final int FAILED_PROPERTY_WRITE_ERROR = 10022;
- private static final int NON_READABLE_PROPERTY_ERROR = 10023;
- private static final int NON_WRITABLE_PROPERTY_ERROR = 10024;
- private static final int UNKNOWN_PROPERTY_ERROR = 10025;
-
- protected static final Map<Class, List<String>> rwPropertyNamesCache = new IdentityHashMap<Class, List<String>>();
- protected static final Map<Class, Map<String, BeanProperty>> rwBeanPropertyCache = new IdentityHashMap<Class, Map<String, BeanProperty>>();
- protected static final Map<Class, PropertyDescriptorCacheEntry> rwPropertyDescriptorCache = new IdentityHashMap<Class, PropertyDescriptorCacheEntry>();
-
- protected static final Map<Class, List<String>> roPropertyNamesCache = new IdentityHashMap<Class, List<String>>();
- protected static final Map<Class, Map<String, BeanProperty>> roBeanPropertyCache = new IdentityHashMap<Class, Map<String, BeanProperty>>();
- protected static final Map<Class, PropertyDescriptorCacheEntry> roPropertyDescriptorCache = new IdentityHashMap<Class, PropertyDescriptorCacheEntry>();
-
- protected boolean cacheProperties = true;
- protected boolean cachePropertiesDescriptors = true;
- protected Class stopClass = Object.class;
-
- protected static final Map ignoreProperties = new HashMap();
- static
- {
- initializeIgnoreProperties();
- }
-
- private static void initializeIgnoreProperties()
- {
- addIgnoreProperty(AbstractMap.class, "empty");
- addIgnoreProperty(AbstractCollection.class, "empty");
- addIgnoreProperty(ASObject.class, "type");
- addIgnoreProperty(Throwable.class, "stackTrace");
- addIgnoreProperty(File.class, "parentFile");
- addIgnoreProperty(File.class, "canonicalFile");
- addIgnoreProperty(File.class, "absoluteFile");
- }
-
- /**
- * Constructor.
- */
- public BeanProxy()
- {
- this(null);
- }
-
- /**
- * Construct a new BeanProxy with the provided default instance.
- *
- * @param defaultInstance defines the alias if provided
- */
- public BeanProxy(Object defaultInstance)
- {
- super(defaultInstance);
-
- // Override default behavior here... standard Map implementations
- // are treated as anonymous Objects, i.e. without an alias.
- if (defaultInstance != null)
- alias = getClassName(defaultInstance);
- }
-
- /** {@inheritDoc} */
- public String getAlias(Object instance)
- {
- return getClassName(instance);
- }
-
- /** {@inheritDoc} */
- public List getPropertyNames(Object instance)
- {
- if (instance == null)
- return null;
-
- Class c = instance.getClass();
- List<String> propertyNames = null;
-
- // Look up property names in cache if we don't have a custom serialization descriptor
- if (descriptor == null)
- {
- if (getIncludeReadOnly())
- {
- synchronized (roPropertyNamesCache)
- {
- propertyNames = roPropertyNamesCache.get(c);
- }
- }
- else
- {
- synchronized (rwPropertyNamesCache)
- {
- propertyNames = rwPropertyNamesCache.get(c);
- }
- }
- }
-
- if (propertyNames != null)
- return propertyNames;
-
- // Make a copy of the property names to return
- propertyNames = new ArrayList<String>(getBeanProperties(instance).keySet());
-
- // Store property names in cache if we are caching properties
- // and we don't have a custom serialization descriptor
- if (cacheProperties && descriptor == null)
- {
- if (getIncludeReadOnly())
- {
- synchronized (roPropertyNamesCache)
- {
- roPropertyNamesCache.put(c, propertyNames);
- }
- }
- else
- {
- synchronized (rwPropertyNamesCache)
- {
- rwPropertyNamesCache.put(c, propertyNames);
- }
- }
- }
- return propertyNames;
- }
-
-
- /** {@inheritDoc} */
- public Class getType(Object instance, String propertyName)
- {
- if (instance == null || propertyName == null)
- return null;
-
- BeanProperty bp = getBeanProperty(instance, propertyName);
- return bp == null? null : bp.getType();
- }
-
- /** {@inheritDoc} */
- public Object getValue(Object instance, String propertyName)
- {
- if (instance == null || propertyName == null)
- return null;
-
- BeanProperty bp = getBeanProperty(instance, propertyName);
- if (bp != null)
- return getBeanValue(instance, bp);
-
- SerializationContext context = getSerializationContext();
- if (!ignorePropertyErrors(context))
- {
- // Property '{propertyName}' not found on class '{alias}'.
- MessageException ex = new MessageException();
- ex.setMessage(UNKNOWN_PROPERTY_ERROR, new Object[] {propertyName, getAlias(instance)});
- throw ex;
- }
- return null;
- }
-
- /**
- * Gets the value specified by the BeanProperty.
- * @param instance Object to get the value from
- * @param bp the property to get
- * @return the value of the property if it exists
- */
- protected final Object getBeanValue(Object instance, BeanProperty bp)
- {
- String propertyName = bp.getName();
- if (bp.isRead())
- {
- try
- {
- Object value = bp.get(instance);
- if (value != null && descriptor != null)
- {
- SerializationDescriptor subDescriptor = (SerializationDescriptor)descriptor.get(propertyName);
- if (subDescriptor != null)
- {
- PropertyProxy subProxy = PropertyProxyRegistry.getProxyAndRegister(value);
- subProxy = (PropertyProxy)subProxy.clone();
- subProxy.setDescriptor(subDescriptor);
- subProxy.setDefaultInstance(value);
- value = subProxy;
- }
- }
- return value;
- }
- catch (Exception e)
- {
- SerializationContext context = getSerializationContext();
-
- // Log failed property set errors
- if (Log.isWarn() && logPropertyErrors(context))
- {
- Logger log = Log.getLogger(LOG_CATEGORY);
- log.warn("Failed to get property {0} on type {1}.",
- new Object[] {propertyName, getAlias(instance)}, e);
- }
-
- if (!ignorePropertyErrors(context))
- {
- // Failed to get property '{propertyName}' on type '{className}'.
- MessageException ex = new MessageException();
- ex.setMessage(FAILED_PROPERTY_READ_ERROR, new Object[] {propertyName, getAlias(instance)});
- ex.setRootCause(e);
- throw ex;
- }
- }
- }
- else
- {
- SerializationContext context = getSerializationContext();
- if (!ignorePropertyErrors(context))
- {
- //Property '{propertyName}' not readable from class '{alias}'.
- MessageException ex = new MessageException();
- ex.setMessage(NON_READABLE_PROPERTY_ERROR, new Object[] {propertyName, getAlias(instance)});
- throw ex;
- }
- }
- return null;
- }
-
- /** {@inheritDoc} */
- public void setValue(Object instance, String propertyName, Object value)
- {
- BeanProperty bp = getBeanProperty(instance, propertyName);
-
- if (bp != null)
- {
- if (bp.isWrite())
- {
- try
- {
- Class desiredPropClass = bp.getType();
- TypeMarshaller marshaller = TypeMarshallingContext.getTypeMarshaller();
- value = marshaller.convert(value, desiredPropClass);
- ClassUtil.validateAssignment(instance, propertyName, value);
- bp.set(instance, value);
- }
- catch (Exception e)
- {
- SerializationContext context = getSerializationContext();
-
- // Log ignore failed property set errors
- if (Log.isWarn() && logPropertyErrors(context))
- {
- Logger log = Log.getLogger(LOG_CATEGORY);
- log.warn("Failed to set property {0} on type {1}.",
- new Object[] {propertyName, getAlias(instance)}, e);
- }
-
- if (!ignorePropertyErrors(context))
- {
- // Failed to get property '{propertyName}' on type '{className}'.
- MessageException ex = new MessageException();
- ex.setMessage(FAILED_PROPERTY_WRITE_ERROR, new Object[] {propertyName, getAlias(instance)});
- ex.setRootCause(e);
- throw ex;
- }
- }
- }
- else
- {
- SerializationContext context = getSerializationContext();
-
- if (Log.isWarn() && logPropertyErrors(context))
- {
- Logger log = Log.getLogger(LOG_CATEGORY);
- log.warn("Property {0} not writable on class {1}",
- new Object[] {propertyName, getAlias(instance)});
- }
-
- if (!ignorePropertyErrors(context))
- {
- //Property '{propertyName}' not writable on class '{alias}'.
- MessageException ex = new MessageException();
- ex.setMessage(NON_WRITABLE_PROPERTY_ERROR, new Object[] {propertyName, getAlias(instance)});
- throw ex;
- }
- }
- }
- else
- {
- SerializationContext context = getSerializationContext();
-
- if (Log.isWarn() && logPropertyErrors(context))
- {
- Logger log = Log.getLogger(LOG_CATEGORY);
- log.warn("Ignoring set property {0} for type {1} as a setter could not be found.",
- new Object[] {propertyName, getAlias(instance)});
- }
-
- if (!ignorePropertyErrors(context))
- {
- // Property '{propertyName}' not found on class '{alias}'.
- MessageException ex = new MessageException();
- ex.setMessage(UNKNOWN_PROPERTY_ERROR, new Object[] {propertyName, getAlias(instance)});
- throw ex;
- }
- }
- }
-
- /**
- * Are we ignoring property errors?
- * @param context serialization paramters.
- * @return true if ignoring property errors.
- */
- protected boolean ignorePropertyErrors(SerializationContext context)
- {
- return context.ignorePropertyErrors;
- }
-
- /**
- * Should we log property errors?
- * @param context serialization parameters.
- * @return true if we should log property errors.
- */
- protected boolean logPropertyErrors(SerializationContext context)
- {
- return context.logPropertyErrors;
- }
-
- /**
- * Determins the classname for both normal types via Class.getName() and
- * virtual types via ASObject.getType(). Virtual types starting
- * with the special ">" token are also handled and the underlying
- * className is returned.
- *
- * @param instance the object to examine.
- * @return the classname to use for instances of this type
- */
- protected String getClassName(Object instance)
- {
- String className;
-
- if (instance instanceof ASObject)
- {
- className = ((ASObject)instance).getType();
- }
- else if (instance instanceof ClassAlias)
- {
- className = ((ClassAlias)instance).getAlias();
- }
- else
- {
- className = instance.getClass().getName();
- // If there's an alias, use that as the class name.
- ClassAliasRegistry registry = ClassAliasRegistry.getRegistry();
- String aliasedClass = registry.getClassName(className);
- className = (aliasedClass == null)? className : aliasedClass;
- }
-
- return className;
- }
-
- /**
- * Return a map of properties for a object.
- * @param instance object to examine.
- * @return a map of Strings to BeanProperty objects.
- */
- protected Map<String, BeanProperty> getBeanProperties(Object instance)
- {
- Class c = instance.getClass();
- Map<String, BeanProperty> props;
-
- // look up instance class in cache if we don't have a custom descriptor.
- if (descriptor == null)
- {
- if (getIncludeReadOnly())
- {
- synchronized (roBeanPropertyCache)
- {
- props = roBeanPropertyCache.get(c);
- }
- }
- else
- {
- synchronized (rwBeanPropertyCache)
- {
- props = rwBeanPropertyCache.get(c);
- }
- }
- if (props != null)
- return props;
- }
-
- props = new HashMap<String, BeanProperty>();
- PropertyDescriptor[] pds = getPropertyDescriptors(c);
- if (pds == null)
- return null;
-
- List excludes = null;
- if (descriptor != null)
- {
- excludes = descriptor.getExcludesForInstance(instance);
- if (excludes == null) // For compatibility with older implementations
- excludes = descriptor.getExcludes();
- }
-
- // Add standard bean properties first
- for (PropertyDescriptor pd : pds)
- {
- String propertyName = pd.getName();
- Method readMethod = pd.getReadMethod();
- Method writeMethod = pd.getWriteMethod();
-
- // If there's a public read method but no writeMethod and includeReadOnly
- // flag is off, then skip the property.
- if (readMethod != null && isPublicAccessor(readMethod.getModifiers()) && !getIncludeReadOnly() && writeMethod == null)
- continue;
-
- // Skip excluded and ignored properties as well.
- if ((excludes != null && excludes.contains(propertyName)) || isPropertyIgnored(c, propertyName))
- continue;
-
- // Ensure we don't include Object getClass() property, possibly returned (incorrectly) by custom BeanInfos
- if (getIncludeReadOnly() && writeMethod == null && "class".equals(propertyName))
- continue;
-
- // Skip any classloader properties
- final Class<?> type = pd.getPropertyType();
- if (type != null && ClassLoader.class.isAssignableFrom(type))
- continue;
-
- props.put(propertyName, new BeanProperty(propertyName, pd.getPropertyType(),
- readMethod, writeMethod, null));
- }
-
- // Then add public fields to list if property does not already exist
- Field[] fields = instance.getClass().getFields();
- for (Field field : fields)
- {
- String propertyName = field.getName();
- int modifiers = field.getModifiers();
- if (isPublicField(modifiers) && !props.containsKey(propertyName))
- {
- // Skip excluded and ignored properties.
- if ((excludes != null && excludes.contains(propertyName)) || isPropertyIgnored(c, propertyName))
- continue;
-
- props.put(propertyName, new BeanProperty(propertyName, field.getType(), null, null, field));
- }
- }
-
- // Update the cache if we don't have a custom serialization descriptor and we are caching.
- if (descriptor == null && cacheProperties)
- {
- if (getIncludeReadOnly())
- {
- synchronized (roBeanPropertyCache)
- {
- roBeanPropertyCache.put(c, props);
- }
- }
- else
- {
- synchronized (rwBeanPropertyCache)
- {
- rwBeanPropertyCache.put(c, props);
- }
- }
- }
-
- return props;
- }
-
- /**
- * Return true if this property is write only, which means we cannot get a value for it.
- *
- * @param instance the instance
- * @param propertyName the property name
- * @return true if there is a way to write but not read the property
- */
- public boolean isWriteOnly(Object instance, String propertyName)
- {
- if (instance == null || propertyName == null)
- return false;
-
- BeanProperty bp = getBeanProperty(instance, propertyName);
- return bp != null && bp.isWrite() && !bp.isRead();
- }
-
- /**
- * Return a specific property descriptor for a named property.
- * @param instance the object to use.
- * @param propertyName the property to get.
- * @return a descriptor for the property.
- */
- protected final BeanProperty getBeanProperty(Object instance, String propertyName)
- {
- Class c = instance.getClass();
- Map props;
-
- // It is faster to use the BeanProperty cache if we are going to cache it.
- if (descriptor == null && cacheProperties)
- {
- props = getBeanProperties(instance);
- return props == null? null : (BeanProperty)props.get(propertyName);
- }
-
- // Otherwise, just build up the property we are asked for
- PropertyDescriptorCacheEntry pce = getPropertyDescriptorCacheEntry(c);
- if (pce == null)
- return null;
-
- Object pType = pce.propertiesByName.get(propertyName);
- if (pType == null)
- return null;
-
- List excludes = null;
- if (descriptor != null)
- {
- excludes = descriptor.getExcludesForInstance(instance);
- if (excludes == null) // For compatibility with older implementations
- excludes = descriptor.getExcludes();
- }
-
- if (pType instanceof PropertyDescriptor)
- {
- PropertyDescriptor pd = (PropertyDescriptor) pType;
-
- Method readMethod = pd.getReadMethod();
- Method writeMethod = pd.getWriteMethod();
-
- // If there's a public read method but no writeMethod and includeReadOnly
- // flag is off, then skip the property.
- if (readMethod != null && isPublicAccessor(readMethod.getModifiers()) && !getIncludeReadOnly() && writeMethod == null)
- return null;
-
- // Skip excluded and ignored properties as well.
- if ((excludes != null && excludes.contains(propertyName)) || isPropertyIgnored(c, propertyName))
- return null;
-
- return new BeanProperty(propertyName, pd.getPropertyType(), readMethod, writeMethod, null);
- }
- else if (pType instanceof Field)
- {
- Field field = (Field) pType;
-
- String pName = field.getName();
- int modifiers = field.getModifiers();
- if (isPublicField(modifiers) && pName.equals(propertyName))
- {
- // Skip excluded and ignored properties.
- return ((excludes != null && excludes.contains(propertyName)) || isPropertyIgnored(c, propertyName))?
- null : new BeanProperty(propertyName, field.getType(), null, null, field);
- }
- }
-
- return null;
- }
-
- /**
- * Return an array of JavaBean property descriptors for a class.
- * @param c the class to examine.
- * @return an array ot JavaBean PropertyDescriptors.
- */
- private PropertyDescriptor [] getPropertyDescriptors(Class c)
- {
- PropertyDescriptorCacheEntry pce = getPropertyDescriptorCacheEntry(c);
- return pce == null? null : pce.propertyDescriptors;
- }
-
- /**
- * Return an entry from the property descriptor cache for a class.
- * @param c the class
- * @return a descriptor cache entry or null
- */
- private PropertyDescriptorCacheEntry getPropertyDescriptorCacheEntry(Class c)
- {
- PropertyDescriptorCacheEntry pce;
- if (getIncludeReadOnly())
- {
- synchronized (roPropertyDescriptorCache)
- {
- pce = roPropertyDescriptorCache.get(c);
- }
- }
- else
- {
- synchronized (rwPropertyDescriptorCache)
- {
- pce = rwPropertyDescriptorCache.get(c);
- }
- }
-
- try
- {
- if (pce == null)
- {
- BeanInfo beanInfo = Introspector.getBeanInfo(c, stopClass);
- pce = new PropertyDescriptorCacheEntry();
- pce.propertyDescriptors = beanInfo.getPropertyDescriptors();
- pce.propertiesByName = createPropertiesByNameMap(pce.propertyDescriptors, c.getFields());
- if (cachePropertiesDescriptors)
- {
- if (getIncludeReadOnly())
- {
- synchronized (roPropertyDescriptorCache)
- {
- roPropertyDescriptorCache.put(c, pce);
- }
- }
- else
- {
- synchronized (rwPropertyDescriptorCache)
- {
- rwPropertyDescriptorCache.put(c, pce);
- }
- }
- }
- }
- }
- catch (IntrospectionException ex)
- {
- // Log failed property set errors
- if (Log.isError())
- {
- Logger log = Log.getLogger(LOG_CATEGORY);
- log.error("Failed to introspect object of type: " + c + " error: " + ExceptionUtil.toString(ex));
- }
-
- // Return an empty descriptor rather than crashing
- pce = new PropertyDescriptorCacheEntry();
- pce.propertyDescriptors = new PropertyDescriptor[0];
- pce.propertiesByName = new TreeMap();
- }
- return pce;
- }
-
- private Map createPropertiesByNameMap(PropertyDescriptor [] pds, Field [] fields)
- {
- Map m = new HashMap(pds.length);
- for (PropertyDescriptor pd : pds)
- {
- Method readMethod = pd.getReadMethod();
- if (readMethod != null && isPublicAccessor(readMethod.getModifiers()) &&
- (getIncludeReadOnly() || pd.getWriteMethod() != null))
- m.put(pd.getName(), pd);
- }
- for (Field field : fields)
- {
- if (isPublicField(field.getModifiers()) && !m.containsKey(field.getName()))
- m.put(field.getName(), field);
- }
- return m;
- }
-
- /**
- * Is this property on the ignore list for this class?
- * @param c the class.
- * @param propertyName the property name.
- * @return true if we should ignore this property.
- */
- public static boolean isPropertyIgnored(Class c, String propertyName)
- {
- boolean result = false;
- Set propertyOwners = (Set)ignoreProperties.get(propertyName);
- if (propertyOwners != null)
- {
- while (c != null)
- {
- if (propertyOwners.contains(c))
- {
- result = true;
- break;
- }
- c = c.getSuperclass();
- }
- }
- return result;
- }
-
- /**
- * Add a property to the ignore list for this class.
- * @param c the class.
- * @param propertyName the property to ignore.
- */
- public static void addIgnoreProperty(Class c, String propertyName)
- {
- synchronized(ignoreProperties)
- {
- Set propertyOwners = (Set)ignoreProperties.get(propertyName);
- if (propertyOwners == null)
- {
- propertyOwners = new HashSet();
- ignoreProperties.put(propertyName, propertyOwners);
- }
- propertyOwners.add(c);
- }
- }
-
- /**
- * Do the provided modifiers indicate that this is public?
- * @param modifiers the flags to check
- * @return true if public but not final, static or transient.
- */
- public static boolean isPublicField(int modifiers)
- {
- return (Modifier.isPublic(modifiers) && !Modifier.isFinal(modifiers)
- && !Modifier.isStatic(modifiers) && !Modifier.isTransient(modifiers));
- }
-
- /**
- * Do the provided modifiers indicate that this is public?
- * @param modifiers the flags to check
- * @return true if public but not static.
- */
- public static boolean isPublicAccessor(int modifiers)
- {
- return (Modifier.isPublic(modifiers) && !Modifier.isStatic(modifiers));
- }
-
- /**
- * A class that holds information about a bean property.
- */
- protected static class BeanProperty
- {
- private String name;
- private Class type;
- private Method readMethod, writeMethod;
- private Field field;
-
- protected BeanProperty(String name, Class type, Method read, Method write, Field field)
- {
- this.name = name;
- this.type = type;
- this.writeMethod = write;
- this.readMethod = read;
- this.field = field;
- }
-
- /**
- * The name of the property..
- * @return the name.
- */
- public String getName()
- {
- return name;
- }
-
- /**
- * The type of the property.
- * @return the type
- */
- public Class getType()
- {
- return type;
- }
-
- /**
- * Is there a setter for this property?
- * @return true if there is a write method.
- */
- public boolean isWrite()
- {
- return writeMethod != null || field != null;
- }
-
- /**
- * Is there a getter for this property?
- * @return true if there is a read method.
- */
- public boolean isRead()
- {
- return readMethod != null || field != null;
- }
-
- /**
- * Returns the Class object that declared the public field or getter function.
- * @return an object of the declaring class for the read method or null if the read method is undefined.
- */
- public Class getReadDeclaringClass()
- {
- if (readMethod != null)
- return readMethod.getDeclaringClass();
- if (field != null)
- return field.getDeclaringClass();
- return null;
- }
-
- /**
- * Return a class that represents the type of the property.
- * @return the type of the property or null if there is no read method defined.
- */
- public Class getReadType()
- {
- if (readMethod != null)
- return readMethod.getReturnType();
- if (field != null)
- return field.getType();
- return null;
- }
-
- /**
- *
- * Returns a string indicating the setter or field name of the property.
- * The setter is prefixed by 'method ', or the field is prefixed by 'field '.
- * @return A string suitable for debugging.
- */
- public String getWriteName()
- {
- if (writeMethod != null)
- return "method " + writeMethod.getName();
- if (field != null)
- return "field " + field.getName();
- return null;
- }
-
- /**
- * Set the property of the object to the specified value.
- * @param bean the bean to set the property on.
- * @param value the value to set.
- * @throws IllegalAccessException if no access.
- * @throws InvocationTargetException if the setter throws an exception.
- */
- public void set(Object bean, Object value) throws IllegalAccessException,
- InvocationTargetException
- {
- if (writeMethod != null)
- writeMethod.invoke(bean, value);
- else if (field != null)
- field.set(bean, value);
- else
- throw new MessageException("Setter not found for property " + name);
- }
-
- /**
- * Get the value of this property from the specified object.
- * @param bean the object to retrieve the value from
- * @return the value of the property.
- * @throws IllegalAccessException if no access.
- * @throws InvocationTargetException if the getter throws an exception.
- */
- public Object get(Object bean) throws IllegalAccessException, InvocationTargetException
- {
- Object obj = null;
- if (readMethod != null)
- obj = readMethod.invoke(bean, (Object[])null);
- else if (field != null)
- obj = field.get(bean);
- return obj;
- }
- }
-
- /**
- * Clears all static caches.
- */
- public static void clear()
- {
- synchronized(ignoreProperties)
- {
- ignoreProperties.clear();
- initializeIgnoreProperties(); // reset to original state
- }
- synchronized(rwPropertyNamesCache)
- {
- rwPropertyNamesCache.clear();
- }
- synchronized(rwBeanPropertyCache)
- {
- rwBeanPropertyCache.clear();
- }
- synchronized(rwPropertyDescriptorCache)
- {
- rwPropertyDescriptorCache.clear();
- }
- synchronized(roPropertyNamesCache)
- {
- roPropertyNamesCache.clear();
- }
- synchronized(roBeanPropertyCache)
- {
- roBeanPropertyCache.clear();
- }
- synchronized(roPropertyDescriptorCache)
- {
- roPropertyDescriptorCache.clear();
- }
- }
-
- /**
- * A cache entry.
- */
- protected static class PropertyDescriptorCacheEntry
- {
- PropertyDescriptor [] propertyDescriptors;
- Map propertiesByName;
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/ClassAlias.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/ClassAlias.java b/core/src/flex/messaging/io/ClassAlias.java
deleted file mode 100644
index 5bf8cdc..0000000
--- a/core/src/flex/messaging/io/ClassAlias.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package flex.messaging.io;
-
-/**
- * A Class can implement this interface to customize the alias reported by
- * a BeanProxy when describing a complex object's traits.
- */
-public interface ClassAlias
-{
- /**
- * The alias to use for this instance.
- */
- public String getAlias();
-}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/ClassAliasRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/ClassAliasRegistry.java b/core/src/flex/messaging/io/ClassAliasRegistry.java
deleted file mode 100644
index b97eaaa..0000000
--- a/core/src/flex/messaging/io/ClassAliasRegistry.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package flex.messaging.io;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A simple registry that maps an alias to a concrete class name. This registry
- * mimics the ActionScript 3 flash.net.registerClassAlias() functionality
- * of the Flash Player. The registry is checked when deserializing AMF object
- * types.
- */
-public class ClassAliasRegistry
-{
- private Map aliasRegistry = new HashMap();
- private static final ClassAliasRegistry registry = new ClassAliasRegistry();
-
- /**
- * Constructs an empty registry.
- */
- private ClassAliasRegistry()
- {
- }
-
- /**
- * Returns the registry singleton.
- */
- public static ClassAliasRegistry getRegistry()
- {
- return registry;
- }
-
- /**
- * Looks for a concrete class name for an alias.
- *
- * @param alias The alias used to search the registry.
- * @return a concrete class name, if registered for this alias, otherwise
- * null.
- */
- public String getClassName(String alias)
- {
- return (String)aliasRegistry.get(alias);
- }
-
- /**
- * Clears all items from the registry.
- */
- public void clear()
- {
- synchronized(aliasRegistry)
- {
- aliasRegistry.clear();
- }
- }
-
- /**
- * Registers a custom alias for a class name.
- *
- * @param alias The alias for the class name.
- * @param className The concrete class name.
- */
- public void registerAlias(String alias, String className)
- {
- synchronized(aliasRegistry)
- {
- aliasRegistry.put(alias, className);
- }
- }
-
- /**
- * Removes a class alias from the registry.
- *
- * @param alias The alias to be removed from the registry.
- */
- public void unregisterAlias(String alias)
- {
- synchronized(aliasRegistry)
- {
- aliasRegistry.remove(alias);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/DictionaryProxy.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/DictionaryProxy.java b/core/src/flex/messaging/io/DictionaryProxy.java
deleted file mode 100644
index 41233d2..0000000
--- a/core/src/flex/messaging/io/DictionaryProxy.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package flex.messaging.io;
-
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.List;
-
-/**
- * Proxies serialization of a Dictionary and considers all keys as String based property
- * names. Additionally, bean properties from the instance are also included and override
- * any Dictionary entries with the same name.
- */
-public class DictionaryProxy extends BeanProxy
-{
- static final long serialVersionUID = 1501461889185692712L;
-
- public DictionaryProxy()
- {
- super();
- //dynamic = true;
- }
-
- public DictionaryProxy(Dictionary defaultInstance)
- {
- super(defaultInstance);
- }
-
- public List getPropertyNames(Object instance)
- {
- if (instance == null)
- return null;
-
- List propertyNames = null;
- List excludes = null;
-
- if (descriptor != null)
- {
- excludes = descriptor.getExcludesForInstance(instance);
- if (excludes == null)
- excludes = descriptor.getExcludes();
- }
-
- // Add all Dictionary keys as properties
- if (instance instanceof Dictionary)
- {
- Dictionary dictionary = (Dictionary)instance;
-
- propertyNames = new ArrayList(dictionary.size());
-
- Enumeration keys = dictionary.keys();
- while (keys.hasMoreElements())
- {
- Object key = keys.nextElement();
- if (key != null)
- {
- if (excludes != null && excludes.contains(key))
- continue;
-
- propertyNames.add(key.toString());
- }
- }
- }
-
- // Then, check for bean properties
- List beanProperties = super.getPropertyNames(instance);
- if (propertyNames == null)
- {
- propertyNames = beanProperties;
- }
- else
- {
- propertyNames.addAll(beanProperties);
- }
-
- return propertyNames;
- }
-
- public Object getValue(Object instance, String propertyName)
- {
- if (instance == null || propertyName == null)
- return null;
-
- // First, check for bean property
- Object value = super.getValue(instance, propertyName);
-
- // Then check for Dictionary entry
- if (value == null && instance instanceof Dictionary)
- {
- Dictionary dictionary = (Dictionary)instance;
- value = dictionary.get(propertyName);
- }
-
- return value;
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/ManagedObjectProxy.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/ManagedObjectProxy.java b/core/src/flex/messaging/io/ManagedObjectProxy.java
deleted file mode 100644
index 34bde91..0000000
--- a/core/src/flex/messaging/io/ManagedObjectProxy.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package flex.messaging.io;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.Iterator;
-
-/**
- *
- */
-public class ManagedObjectProxy extends ObjectProxy
-{
- static final long serialVersionUID = 255140415084514484L;
-
- public ManagedObjectProxy()
- {
- super();
- }
-
- public ManagedObjectProxy(int initialCapacity)
- {
- super(initialCapacity);
- }
-
- public ManagedObjectProxy(int initialCapacity, float loadFactor)
- {
- super(initialCapacity, loadFactor);
- }
-
- public void writeExternal(ObjectOutput out) throws IOException
- {
- int count = this.size();
- out.writeInt(count);
-
- // TODO: QUESTION: Jeff, We could copy the client approach to check a destination
- // for lazy associations to exclude them from serialization.
-
- Iterator it = keySet().iterator();
- while (it.hasNext())
- {
- Object key = it.next();
- out.writeObject(key);
- out.writeObject(get(key));
- }
- }
-
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
- {
- int count = in.readInt();
-
- for (int i = 0; i < count; i++)
- {
- Object key = in.readObject();
- Object value = in.readObject();
- put(key, value);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/MapProxy.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/MapProxy.java b/core/src/flex/messaging/io/MapProxy.java
deleted file mode 100644
index 31bbef6..0000000
--- a/core/src/flex/messaging/io/MapProxy.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package flex.messaging.io;
-
-import flex.messaging.MessageException;
-import flex.messaging.log.Log;
-import flex.messaging.log.Logger;
-import flex.messaging.util.ClassUtil;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Proxies serialization of a Map and considers all keys as String based property
- * names. Additionally, bean properties from the instance are also included and
- * override any Map entries with the same key name.
- */
-public class MapProxy extends BeanProxy
-{
- static final long serialVersionUID = 7857999941099335210L;
-
- private static final int NULL_KEY_ERROR = 10026;
-
- /**
- * Constructor
- */
- public MapProxy()
- {
- super();
- //dynamic = true;
- }
-
- /**
- * Construct with a default instance type.
- * @param defaultInstance defines the alias if provided
- */
- public MapProxy(Object defaultInstance)
- {
- super(defaultInstance);
- //dynamic = true;
- }
-
- /** {@inheritDoc} */
- @Override
- public List getPropertyNames(Object instance)
- {
- if (instance == null)
- return null;
-
- List propertyNames = null;
- List excludes = null;
-
- if (descriptor != null)
- {
- excludes = descriptor.getExcludesForInstance(instance);
- if (excludes == null) // For compatibility with older implementations
- excludes = descriptor.getExcludes();
- }
-
- // Add all Map keys as properties
- if (instance instanceof Map)
- {
- Map map = (Map)instance;
-
- if (map.size() > 0)
- {
- propertyNames = new ArrayList(map.size());
- SerializationContext context = getSerializationContext();
-
- Iterator it = map.keySet().iterator();
- while (it.hasNext())
- {
- Object key = it.next();
- if (key != null)
- {
- if (excludes != null && excludes.contains(key))
- continue;
-
- propertyNames.add(key.toString());
- }
- else
- {
- // Log null key errors
- if (Log.isWarn() && context.logPropertyErrors)
- {
- Logger log = Log.getLogger(LOG_CATEGORY);
- log.warn("Cannot send a null Map key for type {0}.",
- new Object[] {map.getClass().getName()});
- }
-
- if (!context.ignorePropertyErrors)
- {
- // Cannot send a null Map key for type {0}.
- MessageException ex = new MessageException();
- ex.setMessage(NULL_KEY_ERROR, new Object[] {map.getClass().getName()});
- throw ex;
- }
- }
- }
- }
- }
-
- // Then, check for bean properties
- List beanProperties = super.getPropertyNames(instance);
- if (beanProperties != null)
- {
- if (propertyNames == null)
- propertyNames = beanProperties;
- else
- propertyNames.addAll(beanProperties);
- }
-
- return propertyNames;
- }
-
- /** {@inheritDoc} */
- @Override
- public Object getValue(Object instance, String propertyName)
- {
- if (instance == null || propertyName == null)
- return null;
-
- Object value = null;
-
- // First, check for bean property
- BeanProperty bp = getBeanProperty(instance, propertyName);
- if (bp != null)
- value = super.getBeanValue(instance, bp);
-
- // Then check for Map entry
- if (value == null && instance instanceof Map)
- value = getMapValue((Map)instance, propertyName);
-
- return value;
- }
-
- /** {@inheritDoc} */
- @Override
- public void setValue(Object instance, String propertyName, Object value)
- {
- if (instance == null || propertyName == null)
- return;
-
- Map props = getBeanProperties(instance);
- if (props.containsKey(propertyName))
- {
- super.setValue(instance, propertyName, value);
- }
- else if (instance instanceof Map)
- {
- ClassUtil.validateAssignment(instance, propertyName, value);
- ((Map)instance).put(propertyName, value);
- }
- }
-
- /** {@inheritDoc} */
- @Override
- protected boolean ignorePropertyErrors(SerializationContext context)
- {
- return true;
- }
-
- /** {@inheritDoc} */
- @Override
- protected boolean logPropertyErrors(SerializationContext context)
- {
- return false;
- }
-
- /**
- * Return the classname of the instance, including ASObject types.
- * If the instance is a Map and is in the java.util package, we return null.
- * @param instance the object to find the class name of
- * @return the class name of the object.
- */
- @Override
- protected String getClassName(Object instance)
- {
- return (instance != null && instance instanceof Map
- && instance.getClass().getName().startsWith("java.util."))?
- null : super.getClassName(instance);
- }
-
- /**
- * Given a map and a property name, returns the value keyed under that property
- * name but instead of depending on {@link Map#get(Object)}, propertyName
- * is compared against key#toString. This is due to the fact that propertyNames
- * are always stored as Strings.
- *
- * @param map The Map to check against.
- * @param propertyName The property name to check for.
- * @return The value keyed under property name or null if it does not exist.
- */
- protected Object getMapValue(Map map, String propertyName)
- {
- for (Object entry : map.entrySet())
- {
- Object key = ((Map.Entry) entry).getKey();
- if (key.toString().equals(propertyName))
- return ((Map.Entry) entry).getValue();
- }
- return null;
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/MessageDeserializer.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/MessageDeserializer.java b/core/src/flex/messaging/io/MessageDeserializer.java
deleted file mode 100644
index 8262ab8..0000000
--- a/core/src/flex/messaging/io/MessageDeserializer.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package flex.messaging.io;
-
-import flex.messaging.io.amf.ActionMessage;
-import flex.messaging.io.amf.ActionContext;
-import flex.messaging.io.amf.AmfTrace;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * An interface to allow for either AMF or AMFX based deserializers
- * to process requests.
- */
-public interface MessageDeserializer
-{
- void initialize(SerializationContext context, InputStream in, AmfTrace trace);
-
- void readMessage(ActionMessage m, ActionContext context) throws ClassNotFoundException, IOException;
-
- Object readObject() throws ClassNotFoundException, IOException;
-}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/MessageIOConstants.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/MessageIOConstants.java b/core/src/flex/messaging/io/MessageIOConstants.java
deleted file mode 100644
index 844590b..0000000
--- a/core/src/flex/messaging/io/MessageIOConstants.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package flex.messaging.io;
-
-/**
- *
- */
-public interface MessageIOConstants
-{
- int AMF0 = 0;
- int AMF1 = 1; // There is no AMF1 but FMS uses it for some reason, hence special casing.
- int AMF3 = 3;
- Double AMF3_INFO_PROPERTY = new Double(3);
-
- String CONTENT_TYPE_XML = "text/xml; charset=utf-8";
- String AMF_CONTENT_TYPE = "application/x-amf";
- String CONTENT_TYPE_PLAIN = "text/plain";
- String XML_CONTENT_TYPE = "application/xml";
-
- String RESULT_METHOD = "/onResult";
- String STATUS_METHOD = "/onStatus";
-
- int STATUS_OK = 0;
- int STATUS_ERR = 1;
- int STATUS_NOTAMF = 2;
-
- String SECURITY_HEADER_NAME = "Credentials";
- String SECURITY_PRINCIPAL = "userid";
- String SECURITY_CREDENTIALS = "password";
-
- String URL_APPEND_HEADER = "AppendToGatewayUrl";
- String SERVICE_TYPE_HEADER = "ServiceType";
-
- String REMOTE_CLASS_FIELD = "_remoteClass";
- String SUPPORT_REMOTE_CLASS = "SupportRemoteClass";
- String SUPPORT_DATES_BY_REFERENCE = "SupportDatesByReference";
-
- String METHOD_POST = "POST";
- String HEADER_SOAP_ACTION = "SOAPAction";
-}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/MessageSerializer.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/MessageSerializer.java b/core/src/flex/messaging/io/MessageSerializer.java
deleted file mode 100644
index 5347db7..0000000
--- a/core/src/flex/messaging/io/MessageSerializer.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package flex.messaging.io;
-
-import flex.messaging.io.amf.ActionMessage;
-import flex.messaging.io.amf.AmfTrace;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- *
- */
-public interface MessageSerializer
-{
- void setVersion(int value);
-
- void initialize(SerializationContext context, OutputStream out, AmfTrace trace);
-
- void writeMessage(ActionMessage m) throws IOException;
-
- void writeObject(Object value) throws IOException;
-}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/ObjectProxy.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/ObjectProxy.java b/core/src/flex/messaging/io/ObjectProxy.java
deleted file mode 100644
index 6380de5..0000000
--- a/core/src/flex/messaging/io/ObjectProxy.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package flex.messaging.io;
-
-import java.io.Externalizable;
-import java.io.ObjectInput;
-import java.io.IOException;
-import java.io.ObjectOutput;
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * Flex's ObjectProxy class allows an anonymous, dynamic ActionScript Object
- * to be bindable and report change events. Since ObjectProxy only wraps
- * the ActionScript Object type we can map the class to a java.util.HashMap on the
- * server, since the user would expect this type to be deserialized as a
- * java.util.HashMap as it is...
- */
-public class ObjectProxy extends HashMap implements Externalizable
-{
- static final long serialVersionUID = 6978936573135117900L;
-
- public ObjectProxy()
- {
- super();
- }
-
- public ObjectProxy(int initialCapacity)
- {
- super(initialCapacity);
- }
-
- public ObjectProxy(int initialCapacity, float loadFactor)
- {
- super(initialCapacity, loadFactor);
- }
-
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
- {
- Object value = in.readObject();
- if (value instanceof Map)
- {
- putAll((Map)value);
- }
- }
-
- public void writeExternal(ObjectOutput out) throws IOException
- {
- // We can't output "this" to the serializer as it would
- // cause a loop back to writeExternal as this is an Externalizable
- // implementation itself!
-
- Map map = new HashMap();
- map.putAll(this);
- out.writeObject(map);
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/PageableRowSet.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/PageableRowSet.java b/core/src/flex/messaging/io/PageableRowSet.java
deleted file mode 100644
index 6102c33..0000000
--- a/core/src/flex/messaging/io/PageableRowSet.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package flex.messaging.io;
-
-import java.sql.SQLException;
-import java.util.Map;
-
-/**
- * Implementations of this class are recoginized by the serialization filter
- * as result sets that are pageable. A pageable result set is a server side
- * cache of a query result (that implements java.sql.ResultSet) and is
- * typically stored in the session object. Users can request a subset of
- * data from the object given that they know it's id.
- *
- * @see javax.sql.RowSet
- */
-public interface PageableRowSet
-{
- /**
- * Constants for getRecords map keys.
- */
- String PAGE = "Page";
- String CURSOR = "Cursor";
-
- /**
- * List the column names of the result set.
- *
- * @return String[] An array of the column names as strings, as ordered
- * by the result set provider's column number assignment.
- */
- String[] getColumnNames() throws SQLException;
-
- /**
- * Use this method to get a subset of records.
- * A map is returned with two fields, the first being the
- * row number the data page started from, and the second
- * being the array of arrays for the actual data page.
- * @param startIndex the start index of the records
- * @param count the total count
- * @return Map Contains two fields, the page's row index and the actual data array.
- */
- Map getRecords(int startIndex, int count) throws SQLException;
-
- /**
- * Get the total number of rows in the result set
- * @return int The total number of rows in the result set.
- */
- int getRowCount();
-
- /**
- * If this function returns a number >= the total number of records in the recordset,
- * then the recordset should be simply returned to the client in full. However,
- * if it is < the total size, then this object itself is saved in Session data,
- * and tagged with a unique ID.
- * @return int the initial download count
- */
- int getInitialDownloadCount();
-
-
- /**
- * Get the paged result ID.
- * @return String This paged result's (universally unique) id.
- */
- String getID();
-
- /**
- * Get the name of the service that manages the pages
- * @return String The name of the service that will manage this paged result.
- */
- String getServiceName();
-
- /**
- * Set the name of the service that manages the pages.
- * @param serviceName Update the name of the service that manages the pages for this query.
- */
- void setServicename(String serviceName);
-}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/PageableRowSetProxy.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/PageableRowSetProxy.java b/core/src/flex/messaging/io/PageableRowSetProxy.java
deleted file mode 100644
index 2c7d1d2..0000000
--- a/core/src/flex/messaging/io/PageableRowSetProxy.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package flex.messaging.io;
-
-import flex.messaging.MessageException;
-
-import javax.sql.RowSet;
-import java.sql.SQLException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A wrapped PageableRowSet instance requires custom serialization so this
- * legacy type has been made to fit the PropertyProxy interface.
- *
- * TODO: This proxy is similar to features made possible with Externalizable
- * so PageableRowSet/RecordSet should be moved to an Externalizable
- * implementation.
- */
-public class PageableRowSetProxy extends AbstractProxy
-{
- static final long serialVersionUID = 1121859941216924326L;
-
- public static final int HUGE_PAGE_SIZE = Integer.MAX_VALUE;
-
- /**
- * AS Object Type Name.
- */
- public static final String AS_TYPE_NAME = "RecordSet";
-
- public static final Integer RECORD_SET_VERSION = new Integer(1);
-
- /**
- * ActionScript (AS) Object Key Names.
- */
- public static final String TOTAL_COUNT = "totalCount";
- public static final String COLUMN_NAMES = "columnNames";
- public static final String INITIAL_DATA = "initialData";
- public static final String SERVICE_NAME = "serviceName";
- public static final String SERVER_INFO = "serverInfo";
- public static final String VERSION = "version";
- public static final String CURSOR = "cursor";
- public static final String ID = "id";
-
- public static final List propertyNameCache = new ArrayList();
- static
- {
- propertyNameCache.add(SERVER_INFO);
- }
-
- public PageableRowSetProxy()
- {
- super(null);
- alias = AS_TYPE_NAME;
- }
-
- public PageableRowSetProxy(RowSet defaultInstance)
- {
- super(defaultInstance);
- alias = AS_TYPE_NAME;
- }
-
- public PageableRowSetProxy(PageableRowSet defaultInstance)
- {
- super(defaultInstance);
- alias = AS_TYPE_NAME;
- }
-
- public String getAlias(Object instance)
- {
- return AS_TYPE_NAME;
- }
-
- public List getPropertyNames(Object instance)
- {
- return propertyNameCache;
- }
-
- public Class getType(Object instance, String propertyName)
- {
- if (SERVER_INFO.equals(propertyName))
- {
- return HashMap.class;
- }
- else
- {
- return null;
- }
- }
-
- public Object getValue(Object instance, String propertyName)
- {
- Object value = null;
-
- if (instance instanceof RowSet)
- {
- //Wrap in PageableRowSet just for its utility methods and don't create an id.
- instance = new PagedRowSet((RowSet)instance, HUGE_PAGE_SIZE, false);
- }
-
- if (instance instanceof PageableRowSet)
- {
- PageableRowSet prs = (PageableRowSet)instance;
-
- if (SERVER_INFO.equals(propertyName))
- {
- try
- {
- HashMap serverInfo = new HashMap();
- serverInfo.put(ID, prs.getID());
-
- Map pageInfo = prs.getRecords(1, prs.getInitialDownloadCount());
-
- serverInfo.put(TOTAL_COUNT, new Integer(prs.getRowCount()));
- serverInfo.put(INITIAL_DATA, pageInfo.get(PageableRowSet.PAGE)); //Array of Arrays - the first page returned
- serverInfo.put(CURSOR, pageInfo.get(PageableRowSet.CURSOR)); //Integer
- serverInfo.put(SERVICE_NAME, prs.getServiceName());
- serverInfo.put(COLUMN_NAMES, prs.getColumnNames());
- serverInfo.put(VERSION, RECORD_SET_VERSION);
- value = serverInfo;
- }
- catch (SQLException ex)
- {
- MessageException e = new MessageException();
- e.setMessage("Error encountered serializing RowSet.");
- e.setRootCause(ex);
- throw e;
- }
- }
- }
-
- return value;
- }
-
- public void setValue(Object instance, String propertyName, Object value)
- {
- // Client-to-server not supported
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/8315f8fa/core/src/flex/messaging/io/PagedRowSet.java
----------------------------------------------------------------------
diff --git a/core/src/flex/messaging/io/PagedRowSet.java b/core/src/flex/messaging/io/PagedRowSet.java
deleted file mode 100644
index 6224905..0000000
--- a/core/src/flex/messaging/io/PagedRowSet.java
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package flex.messaging.io;
-
-import flex.messaging.util.UUIDUtils;
-
-import javax.sql.RowSet;
-import java.sql.Blob;
-import java.sql.Clob;
-import java.sql.ResultSetMetaData;
-import java.sql.SQLException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A wrapper for a RowSet to make it pageable. This technique is recommended
- * if the RowSet is 'too big' to download all at once, AND the developer's
- * client-side code is capable of dealing with non-fully-populated recordsets,
- * that is, ActionScript RecordSets which are missing some of their data.
- *
- * @version 1.0
- */
-public class PagedRowSet implements PageableRowSet
-{
- private RowSet rowSet;
- private String[] colNames;
- private int pageSize = 50; //Default to 50 records a page
- private int colCount = 0;
- private int rowCount = 0;
-
- private String id = null;
- private String serviceName = null;
-
- /**
- * Pageable Rowset Service Name.
- */
- public static final String DEFAULT_PAGING_SERVICE_NAME = "PageableRowSetCache";
-
-
- /**
- * Constructor
- * <p>
- * Creates a UUID for this object. Format: `XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
- * </p>
- *
- * @param r The RowSet to be paged.
- * @param p The initial page size.
- */
- public PagedRowSet(RowSet r, int p)
- {
- serviceName = DEFAULT_PAGING_SERVICE_NAME;
- rowSet = r;
- pageSize = p;
- id = UUIDUtils.createUUID();
- init();
- }
-
- /**
- * Allows the unique id generation of the RowSet to be toggled.
- * @see #PagedRowSet(RowSet, int)
- *
- * @param r the row set
- * @param p the page size
- * @param createID should we create an id?
- */
- public PagedRowSet(RowSet r, int p, boolean createID)
- {
- serviceName = DEFAULT_PAGING_SERVICE_NAME;
- rowSet = r;
- pageSize = p;
- if (createID)
- {
- id = UUIDUtils.createUUID();
- }
- init();
- }
-
- private void init()
- {
- if (rowSet != null)
- {
- //Initialize columns
- initColumns();
-
- //Initialize records
- initRecords();
- }
- else
- {
- colNames = new String[0];
- }
- }
-
-
- private synchronized void initColumns()
- {
- try
- {
- ResultSetMetaData rsmd = rowSet.getMetaData();
- if (rsmd != null)
- {
- colCount = rsmd.getColumnCount();
- }
- }
- catch (SQLException ex)
- {
- colCount = 0;
- }
- }
-
-
- private synchronized void initRecords()
- {
- //Determine rs size
- if (rowSet != null)
- {
- try
- {
- int currentIndex = rowSet.getRow();
-
- //Go to the end and get that row number
- if (rowSet.last())
- {
- rowCount = rowSet.getRow();
- }
-
- //Put the cursor back
- if (currentIndex > 0)
- {
- rowSet.absolute(currentIndex);
- }
- else
- {
- rowSet.beforeFirst();
- }
- }
- catch (SQLException ex)
- {
- //TODO: Decide whether if absolute() not be supported, try first() as a last resort??
- try
- {
- rowSet.first();
- }
- catch (SQLException se)
- {
- //we won't try anymore.
- }
- }
- }
- }
-
-
- /**
- * List the column names of the result set.
- *
- * @return String[] An array of the column names as strings, as ordered
- * by the result set provider's column number assignment.
- */
- public synchronized String[] getColumnNames()
- {
- // Cache the column names lookup
- if (colNames == null)
- {
- try
- {
- //Ensure column count is initialized
- if (colCount == 0)
- {
- initColumns();
- }
-
- colNames = new String[colCount];
-
- for (int i = 0; i < colCount; i++)
- {
- //Note: column numbers start at 1
- colNames[i] = rowSet.getMetaData().getColumnName(i + 1);
- }
- }
- catch (SQLException ex)
- {
- colNames = new String[0];
- }
- }
-
- // Create a copy
- String[] ret = new String[colNames.length];
- System.arraycopy(colNames, 0, ret, 0, colNames.length);
- return ret;
- }
-
-
- /**
- * Use this method to get a map of the index used to start the data page,
- * and an array of arrays of the actual data page itself.
- *
- * @param startIndex starting index
- * @param count how many records to return
- * @return Map A map with two fields, the index of the row to start the page, and an array of
- * arrays for the actual data page.
- * @throws SQLException if unable to get data from the rowset
- */
- public synchronized Map getRecords(int startIndex, int count) throws SQLException
- {
- List aRecords = new ArrayList(); //Don't initialize with count as it could be Integer.MAX_VALUE
-
- //Ensure column count is initialized
- if (colCount == 0)
- {
- initColumns();
- }
-
- //Starting index cannot be less than 1
- if (startIndex < 1)
- startIndex = 1;
-
- //Populate the page, moving cursor to index
- if (rowSet.absolute(startIndex))
- {
- //Loop over the result set for the count specified
- for (int i = 0; i < count; i++)
- {
- boolean hasNext;
-
- List row;
-
- if (colCount > 0)
- {
- row = new ArrayList(rowCount + 1);
- //Loop over columns to create an array for the row
- for (int j = 1; j <= colCount; j++)
- {
- Object data = rowSet.getObject(j);
- if (data instanceof Clob)
- {
- Clob clob = (Clob) data;
- row.add(clob.getSubString(0, (int) clob.length()));
- }
- else if (data instanceof Blob)
- {
- Blob blob = (Blob) data;
- byte[] bytes = blob.getBytes(1, (int) blob.length());
- row.add(bytes);
- }
- else
- row.add(data);
- }
- }
- else //HACK: Handle any ColdFusion Query Objects that have no column metadata!
- {
- row = new ArrayList();
-
- try
- {
- //Get as many columns as possible to build the row
- //Stop on error or the first null column returned.
- for (int j = 1; j <= 50; j++)
- {
- Object o = rowSet.getObject(j);
- if (o != null)
- {
- row.add(o);
- }
- else
- {
- break;
- }
- }
- }
- catch (SQLException ex)
- {
- //Stop looking and just add the row.
- }
- }
-
- aRecords.add(row.toArray());
-
- hasNext = rowSet.next();
-
- //Cursor beyond last row, stop!
- if (!hasNext)
- {
- break;
- }
- }
- }
-
- Map result = new HashMap(2);
- result.put(PAGE, aRecords.toArray());
- result.put(CURSOR, Integer.valueOf(startIndex));
-
- return result;
- }
-
- /**
- * Get the row count.
- *
- * @return int The total number of rows in the result set.
- */
- public int getRowCount()
- {
- return rowCount;
- }
-
- /**
- * If this function returns a number >= the total number of rows in the result set,
- * then the result set should be simply returned to the client in full. However,
- * if it is < the total size, then this object itself is saved in Session data,
- * and tagged with a unique ID.
- *
- * @return the page size
- */
- public int getInitialDownloadCount()
- {
- return pageSize;
- }
-
- /**
- * Return the id of this row set.
- * @return the id
- */
- public String getID()
- {
- return id;
- }
-
- /**
- * Get the service name.
- *
- * @return String The name of the service that will manage this paged result.
- */
- public String getServiceName()
- {
- return serviceName;
- }
-
- /**
- * Set the service name.
- *
- * @param serviceName Update the name of the service that manages the pages for this query.
- */
- public void setServicename(String serviceName)
- {
- this.serviceName = serviceName;
- }
-}