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 2001/05/21 21:36:22 UTC

cvs commit: xml-axis/java/src/org/apache/axis/encoding TypeMappingRegistry.java

rubys       01/05/21 12:36:21

  Modified:    java/src/org/apache/axis/encoding TypeMappingRegistry.java
  Log:
  Allow type mapping registries to be "chained".
  
  Revision  Changes    Path
  1.9       +40 -25    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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- TypeMappingRegistry.java	2001/05/07 19:56:17	1.8
  +++ TypeMappingRegistry.java	2001/05/21 19:36:18	1.9
  @@ -68,6 +68,7 @@
   
   /**
    * @author James Snell (jasnell@us.ibm.com)
  + * @author Sam Ruby (rubys@us.ibm.com)
    */
   public class TypeMappingRegistry implements Serializer { 
   
  @@ -91,9 +92,21 @@
           }
       }
       
  +    TypeMappingRegistry parent = null;
       Hashtable s;
       Hashtable d;
       
  +    /**
  +     * Define a "parent" TypeMappingRegistry that will be used to service
  +     * any requests that are not satisfied by this this instance.  This
  +     * enables a chain of TypeMappingRegistries to be employed that contain,
  +     * say, a transient set of types, followed by a persistent set of
  +     * deployed types, followed by the system defined SOAPTypes
  +     */
  +    public void setParent(TypeMappingRegistry parent) {
  +        this.parent = parent;
  +    }
  +
       public void addSerializer(Class _class,
                                 QName qName,
                                 Serializer serializer) {
  @@ -109,40 +122,40 @@
       }
   
       public Serializer getSerializer(Class _class) {
  -        if (s == null)
  -            return null;
  -        SerializerDescriptor desc = (SerializerDescriptor)s.get(_class);
  -        if (desc != null) return desc.serializer;
  +        if (s != null) {
  +            SerializerDescriptor desc = (SerializerDescriptor)s.get(_class);
  +            if (desc != null) return desc.serializer;
  +        }
  +        if (parent != null) return parent.getSerializer(_class);
           return null;
       }
       
       public QName getTypeQName(Class _class) {
  -        if (s == null)
  -            return null;
  -        SerializerDescriptor desc = (SerializerDescriptor)s.get(_class);
  -        if (desc != null) return desc.typeQName;
  +        if (s != null) {
  +            SerializerDescriptor desc = (SerializerDescriptor)s.get(_class);
  +            if (desc != null) return desc.typeQName;
  +        }
  +        if (parent != null) return parent.getTypeQName(_class);
           return null;
       }
       
  -    public Class getClassForQName(QName type)
  -    {
  -        if (d == null)
  -            return null;
  -        DeserializerDescriptor desc = (DeserializerDescriptor)d.get(type);
  -        if (desc != null) return desc.cls;
  +    public Class getClassForQName(QName type) {
  +        if (d != null) {
  +            DeserializerDescriptor desc = (DeserializerDescriptor)d.get(type);
  +            if (desc != null) return desc.cls;
  +        }
  +        if (parent != null) return parent.getClassForQName(type);
           return null;
       }
       
       public DeserializerBase getDeserializer(QName qname) {
  -        if (d == null)
  -            return null;
  -        
  -        DeserializerDescriptor desc = (DeserializerDescriptor)d.get(qname);
  -        if ((desc == null) || (desc.factory == null))
  -            return null;
  -        
  -        DeserializerBase dSer = desc.factory.getDeserializer();
  -        return dSer;
  +        if (d != null) {
  +            DeserializerDescriptor desc = (DeserializerDescriptor)d.get(qname);
  +            if ((desc != null) && (desc.factory != null))
  +               return desc.factory.getDeserializer();
  +        }
  +        if (parent != null) return parent.getDeserializer(qname);
  +        return null;
       }
       
       public void removeSerializer(Class _class) {
  @@ -154,12 +167,14 @@
       }
       
       public boolean hasSerializer(Class _class) {
  -        if (s != null) return s.containsKey(_class);
  +        if (s != null && s.containsKey(_class)) return true;
  +        if (parent != null) return parent.hasSerializer(_class);
           return false;
       }
       
       public boolean hasDeserializer(QName qname) {
  -        if (d != null) return d.containsKey(qname);
  +        if (d != null && d.containsKey(qname)) return true;
  +        if (parent != null) return parent.hasDeserializer(qname);
           return false;
       }