axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gdani...@apache.org
Subject cvs commit: xml-axis/java/src/org/apache/axis/encoding TypeMappingRegistry.java
Date Wed, 12 Dec 2001 19:14:47 GMT
gdaniels    01/12/12 11:14:47

  Modified:    java/src/org/apache/axis/encoding TypeMappingRegistry.java
  Log:
  Clean up / speed up search for Serializers.
  
  Revision  Changes    Path
  1.41      +29 -27    xml-axis/java/src/org/apache/axis/encoding/TypeMappingRegistry.java
  
  Index: TypeMappingRegistry.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/TypeMappingRegistry.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- TypeMappingRegistry.java	2001/12/12 18:54:08	1.40
  +++ TypeMappingRegistry.java	2001/12/12 19:14:47	1.41
  @@ -236,6 +236,34 @@
                              "CDATA", context.qName2String(type));
           return attrs;
       }
  +
  +    /**
  +     * Utility method to help us find an appropriate Serializer.
  +     *
  +     */ 
  +    private Serializer findSerializer(Class cls)
  +    {
  +        if ((cls == null) || (cls == Object.class))
  +            return null;
  +      
  +        // If we find one for this class itself, use it.
  +        Serializer ser = getSerializer(cls);
  +        if (ser != null)
  +            return ser;
  +        
  +        // Search implemented interfaces
  +        if (!cls.isInterface()) {
  +            Class [] interfaces = cls.getInterfaces();
  +            for (int i = 0 ; i < interfaces.length ; i++ ) { 
  +                ser = findSerializer(interfaces[i]);
  +                if (ser != null)
  +                    return ser;
  +            }
  +        }
  +        
  +        // Search up the inheritance tree from here
  +        return findSerializer(cls.getSuperclass());
  +    }
       
       public void serialize(QName name, Attributes attributes,
                             Object value, SerializationContext context)
  @@ -244,34 +272,8 @@
           if (value != null) {
               Serializer  ser     = null ;
               Class       _class  = null ;
  -
  -            // Check the most common case first
  -            ser = getSerializer( _class = value.getClass() );
  -            if ( ser == null ) {
  -                // Use a Vector and remove(0) because it MUST be 
  -                // first-in-first-out
  -                Vector  classes = new Vector();
  -                classes.add( _class );
  -        
  -                while( classes.size() != 0 ) {
  -                    _class = (Class) classes.remove( 0 );
  -                    if ( (ser = getSerializer(_class)) != null ) break ;
  -                    if ( classes == null ) classes = new Vector();
  -                    Class[] ifaces = _class.getInterfaces();
  -                    for (int i = 0 ; i < ifaces.length ; i++ ) 
  -                        classes.add( ifaces[i] );
  -                    _class = _class.getSuperclass();
   
  -                    // Add any non-null (and non-Object) class.  We skip
  -                    // the Object class because if we reach that then
  -                    // there's an error and this error message return 
  -                    // here is better than the one returned by the
  -                    // ObjSerializer.
  -                    if ( _class != null &&
  -                         !_class.getName().equals("java.lang.Object")) 
  -                       classes.add( _class );
  -                }
  -            }
  +            ser = findSerializer( _class = value.getClass() );
   
               if ( ser != null ) {
                   QName type = getTypeQName(_class);
  
  
  

Mime
View raw message