gdaniels    02/03/08 06:12:13

  Modified:    java/src/org/apache/axis/description TypeDesc.java
               java/src/org/apache/axis/encoding/ser BeanDeserializer.java
                        BeanSerializer.java SimpleDeserializer.java
                        SimpleSerializer.java
  Log:
  Add static accessor to centralize access to type metadata for a class.
  
  For now this is limited to using the static getTypeDesc() method if it is
  found, but will allow us to add file-based metadata descriptors later.
  
  Revision  Changes    Path
  1.3       +28 -0     xml-axis/java/src/org/apache/axis/description/TypeDesc.java
  
  Index: TypeDesc.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/description/TypeDesc.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TypeDesc.java     8 Mar 2002 05:11:24 -0000       1.2
  +++ TypeDesc.java     8 Mar 2002 14:12:13 -0000       1.3
  @@ -55,9 +55,12 @@
   
   package org.apache.axis.description;
   
  +import org.apache.axis.encoding.ser.BeanSerializer;
  +
   import javax.xml.rpc.namespace.QName;
   import java.util.HashMap;
   import java.lang.reflect.Array;
  +import java.lang.reflect.Method;
   
   /**
    * A TypeDesc represents a Java<->XML data binding.  It is essentially
  @@ -67,6 +70,31 @@
    * @author Glen Daniels ([EMAIL PROTECTED])
    */
   public class TypeDesc {
  +    public static Class [] noClasses = new Class [] {};
  +
  +    /**
  +     * Static function for centralizing access to type metadata for a
  +     * given class.
  +     *
  +     * Right now this just checks for a static getTypeDesc() method on the
  +     * class, but we will eventually extend this to provide for external
  +     * metadata config (via files sitting in the classpath, etc).
  +     *
  +     * (Could introduce a cache here for speed as an optimization)
  +     */
  +    public static TypeDesc getTypeDescForClass(Class cls)
  +    {
  +        try {
  +            Method getTypeDesc =
  +                    cls.getMethod("getTypeDesc", noClasses);
  +            if (getTypeDesc != null)
  +                return (TypeDesc)getTypeDesc.invoke(null,
  +                                                    BeanSerializer.noArgs);
  +        } catch (Exception e) {
  +        }
  +        return null;
  +    }
  +
       private FieldDesc [] fields;
   
       /** A cache of FieldDescs by name */
  
  
  
  1.9       +3 -12     
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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- BeanDeserializer.java     8 Mar 2002 05:04:54 -0000       1.8
  +++ BeanDeserializer.java     8 Mar 2002 14:12:13 -0000       1.9
  @@ -121,18 +121,9 @@
               BeanPropertyDescriptor descriptor = pd[i];
               propertyMap.put(descriptor.getName(), descriptor);
           }
  -        
  -        // Get the class' TypeDesc if it provides one
  -        try {
  -            Method getTypeDesc = 
  -                    javaType.getMethod("getTypeDesc",
  -                                       new Class [] {});
  -            // get string array
  -            typeDesc = (TypeDesc)getTypeDesc.invoke(null, 
  -                                                    BeanSerializer.noArgs);
  -        } catch (Exception e) {
  -        }
  -        
  +
  +        typeDesc = TypeDesc.getTypeDescForClass(javaType);
  +
           // create a value
           try {
               value=javaType.newInstance();
  
  
  
  1.15      +1 -9      
xml-axis/java/src/org/apache/axis/encoding/ser/BeanSerializer.java
  
  Index: BeanSerializer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanSerializer.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- BeanSerializer.java       8 Mar 2002 05:04:54 -0000       1.14
  +++ BeanSerializer.java       8 Mar 2002 14:12:13 -0000       1.15
  @@ -137,15 +137,7 @@
           this.javaType = javaType;
           propertyDescriptor = getPd(javaType);
   
  -        // Get the class' TypeDesc if it provides one
  -        try {
  -            Method getTypeDesc = 
  -                    javaType.getMethod("getTypeDesc",
  -                                       new Class [] {});
  -            // get string array
  -            typeDesc = (TypeDesc)getTypeDesc.invoke(null, noArgs);
  -        } catch (Exception e) {
  -        }
  +        typeDesc = TypeDesc.getTypeDescForClass(javaType);
       }
   
       // Construct BeanSerializer for the indicated class/qname and format
  
  
  
  1.6       +1 -10     
xml-axis/java/src/org/apache/axis/encoding/ser/SimpleDeserializer.java
  
  Index: SimpleDeserializer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/SimpleDeserializer.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SimpleDeserializer.java   8 Mar 2002 05:04:54 -0000       1.5
  +++ SimpleDeserializer.java   8 Mar 2002 14:12:13 -0000       1.6
  @@ -124,16 +124,7 @@
                   propertyMap.put(descriptor.getName(), descriptor);
               }
   
  -            // Get the class' TypeDesc if it provides one
  -            try {
  -                Method getTypeDesc =
  -                        javaType.getMethod("getTypeDesc",
  -                                           new Class [] {});
  -                // get string array
  -                typeDesc = (TypeDesc)getTypeDesc.invoke(null,
  -                                                        BeanSerializer.noArgs);
  -            } catch (Exception e) {
  -            }
  +            typeDesc = TypeDesc.getTypeDescForClass(javaType);
           }
           
       }
  
  
  
  1.6       +1 -10     
xml-axis/java/src/org/apache/axis/encoding/ser/SimpleSerializer.java
  
  Index: SimpleSerializer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/SimpleSerializer.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SimpleSerializer.java     8 Mar 2002 05:04:54 -0000       1.5
  +++ SimpleSerializer.java     8 Mar 2002 14:12:13 -0000       1.6
  @@ -105,16 +105,7 @@
           if (SimpleType.class.isAssignableFrom(javaType)) {
               // get the bean properties and the list of attributes from the bean
               propertyDescriptor = BeanSerializer.getPd(javaType);
  -            // Get the class' TypeDesc if it provides one
  -            try {
  -                Method getTypeDesc =
  -                        javaType.getMethod("getTypeDesc",
  -                                           new Class [] {});
  -                // get string array
  -                typeDesc = (TypeDesc)getTypeDesc.invoke(null,
  -                                                        BeanSerializer.noArgs);
  -            } catch (Exception e) {
  -            }
  +            typeDesc = TypeDesc.getTypeDescForClass(javaType);
           }
       }
       /**
  
  
  


Reply via email to