You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ru...@apache.org on 2002/08/08 16:35:48 UTC

cvs commit: xml-axis/java/src/org/apache/axis/encoding/ser BeanDeserializer.java BeanDeserializerFactory.java

rubys       2002/08/08 07:35:48

  Modified:    java/src/org/apache/axis/encoding/ser BeanDeserializer.java
                        BeanDeserializerFactory.java
  Log:
  Optimize construction of a BeanDeserializer by caching the
  type descriptor and property map.
  
  Revision  Changes    Path
  1.43      +8 -15     xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java
  
  Index: BeanDeserializer.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- BeanDeserializer.java	3 Aug 2002 21:25:25 -0000	1.42
  +++ BeanDeserializer.java	8 Aug 2002 14:35:48 -0000	1.43
  @@ -64,7 +64,6 @@
   import org.apache.axis.message.SOAPHandler;
   import org.apache.axis.utils.BeanPropertyDescriptor;
   import org.apache.axis.utils.JavaUtils;
  -import org.apache.axis.utils.BeanUtils;
   
   import org.apache.axis.components.logger.LogFactory;
   import org.apache.commons.logging.Log;
  @@ -75,7 +74,6 @@
   import javax.xml.namespace.QName;
   
   import java.io.Serializable;
  -import java.util.HashMap;
   import java.util.Iterator;
   import java.util.Map;
   
  @@ -109,22 +107,17 @@
   
       // Construct BeanDeserializer for the indicated class/qname and meta Data
       public BeanDeserializer(Class javaType, QName xmlType, TypeDesc typeDesc ) {
  +        this(javaType, xmlType, typeDesc,
  +             BeanDeserializerFactory.getProperties(javaType, typeDesc));
  +    }
  +
  +    // Construct BeanDeserializer for the indicated class/qname and meta Data
  +    public BeanDeserializer(Class javaType, QName xmlType, TypeDesc typeDesc,
  +                            Map propertyMap ) {
           this.xmlType = xmlType;
           this.javaType = javaType;
           this.typeDesc = typeDesc;
  -        // Get a list of the bean properties
  -        BeanPropertyDescriptor[] pd = null;
  -        if (typeDesc != null) {
  -            propertyMap = typeDesc.getPropertyDescriptorMap();
  -        } else {
  -            pd = BeanUtils.getPd(javaType, null);
  -            propertyMap = new HashMap();
  -            // loop through properties and grab the names for later
  -            for (int i = 0; i < pd.length; i++) {
  -                BeanPropertyDescriptor descriptor = pd[i];
  -                propertyMap.put(descriptor.getName(), descriptor);
  -            }
  -        }
  +        this.propertyMap = propertyMap;
   
           // create a value
           try {
  
  
  
  1.4       +54 -0     xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializerFactory.java
  
  Index: BeanDeserializerFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializerFactory.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BeanDeserializerFactory.java	11 Jun 2002 14:53:55 -0000	1.3
  +++ BeanDeserializerFactory.java	8 Aug 2002 14:35:48 -0000	1.4
  @@ -55,16 +55,28 @@
   
   package org.apache.axis.encoding.ser;
   
  +import org.apache.axis.description.TypeDesc;
  +import org.apache.axis.encoding.Deserializer;
  +import org.apache.axis.utils.BeanPropertyDescriptor;
  +import org.apache.axis.utils.BeanUtils;
   import org.apache.axis.utils.JavaUtils;
   
  +import java.util.HashMap;
  +import java.util.Map;
   import javax.xml.namespace.QName;
   
   /**
    * DeserializerFactory for Bean
    *
    * @author Rich Scheuerle <sc...@us.ibm.com>
  + * @author Sam Ruby <ru...@us.ibm.com>
    */
   public class BeanDeserializerFactory extends BaseDeserializerFactory {
  +
  +    /** Type metadata about this class for XML deserialization */
  +    protected TypeDesc typeDesc = null;
  +    protected Map propertyMap = null;
  +
       public BeanDeserializerFactory(Class javaType, QName xmlType) {
           super(BeanDeserializer.class, xmlType, javaType);
           
  @@ -73,5 +85,47 @@
           if (JavaUtils.isEnumClass(javaType)) {
               deserClass = EnumDeserializer.class;
           }
  +    }
  +
  +   /**
  +     * Get a list of the bean properties
  +     */
  +    public static Map getProperties(Class javaType, TypeDesc typeDesc ) {
  +        Map propertyMap = null;
  +
  +        if (typeDesc != null) {
  +            propertyMap = typeDesc.getPropertyDescriptorMap();
  +        } else {
  +            BeanPropertyDescriptor[] pd = BeanUtils.getPd(javaType, null);
  +            propertyMap = new HashMap();
  +            // loop through properties and grab the names for later
  +            for (int i = 0; i < pd.length; i++) {
  +                BeanPropertyDescriptor descriptor = pd[i];
  +                propertyMap.put(descriptor.getName(), descriptor);
  +            }
  +        }
  +
  +        return propertyMap;
  +    }
  +
  +   /**
  +     * Optimize construction of a BeanDeserializer by caching the
  +     * type descriptor and property map.
  +     */
  +    protected Deserializer getGeneralPurpose(String mechanismType) {
  +        if (javaType == null || xmlType == null) {
  +           return super.getGeneralPurpose(mechanismType);
  +        }
  +
  +        if (deserClass == EnumSerializer.class) {
  +           return super.getGeneralPurpose(mechanismType);
  +        }
  +
  +        if (propertyMap == null && firstCall) {
  +            typeDesc = TypeDesc.getTypeDescForClass(javaType);
  +            propertyMap = getProperties(javaType, typeDesc);
  +        }
  +
  +        return new BeanDeserializer(javaType, xmlType, typeDesc, propertyMap);
       }
   }