Argh - I don't have time to get into this right now (sorry, am still slammed with 
internal stuff), but this looks weird to me - it seems to actually remove the hooks 
for autoTyping to work in the first place (i.e. the check for the trigger namespace).  
Am I missing something here?

--Glen

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, July 02, 2003 12:48 PM
> To: [EMAIL PROTECTED]
> Subject: cvs commit: 
> xml-axis/java/src/org/apache/axis/encoding TypeMappingImpl.java
> 
> 
> dims        2003/07/02 09:47:32
> 
>   Modified:    java/src/org/apache/axis/encoding TypeMappingImpl.java
>   Log:
>   Fix for Bug 18084 - Auto Typing in TypeMappingImpl only 
> puts types in the default namespace
>   from [EMAIL PROTECTED] (Dan Diephouse)
>   
>   Revision  Changes    Path
>   1.42      +56 -53    
> xml-axis/java/src/org/apache/axis/encoding/TypeMappingImpl.java
>   
>   Index: TypeMappingImpl.java
>   ===================================================================
>   RCS file: 
> /home/cvs/xml-axis/java/src/org/apache/axis/encoding/TypeMappi
> ngImpl.java,v
>   retrieving revision 1.41
>   retrieving revision 1.42
>   diff -u -r1.41 -r1.42
>   --- TypeMappingImpl.java    22 Apr 2003 19:34:25 -0000      1.41
>   +++ TypeMappingImpl.java    2 Jul 2003 16:47:32 -0000       1.42
>   @@ -57,10 +57,13 @@
>    
>    import org.apache.axis.Constants;
>    import org.apache.axis.components.logger.LogFactory;
>   +import org.apache.axis.encoding.ser.ArrayDeserializerFactory;
>   +import org.apache.axis.encoding.ser.ArraySerializerFactory;
>    import org.apache.axis.encoding.ser.BeanDeserializerFactory;
>    import org.apache.axis.encoding.ser.BeanSerializerFactory;
>   -import org.apache.axis.utils.ClassUtils;
>    import org.apache.axis.utils.Messages;
>   +import org.apache.axis.wsdl.fromJava.Namespaces;
>   +import org.apache.axis.wsdl.fromJava.Types;
>    import org.apache.commons.logging.Log;
>    
>    import javax.xml.namespace.QName;
>   @@ -139,10 +142,6 @@
>        protected TypeMapping delegate;   // Pointer to 
> delegate or null
>        private ArrayList namespaces;   // Supported namespaces
>    
>   -    /**
>   -     * Should we "auto-type" classes we don't recognize 
> into the "java:"
>   -     * namespace?
>   -     */
>        private boolean doAutoTypes = false;
>    
>        /**
>   @@ -327,13 +326,6 @@
>                if (xmlType == null) {
>                    return null;
>                }
>   -
>   -            // If we're doing autoTyping, and we got a 
> type in the right
>   -            // namespace, we can use the default serializer.
>   -            if (doAutoTypes &&
>   -                    
> xmlType.getNamespaceURI().equals(Constants.NS_URI_JAVA)) {
>   -                return new BeanSerializerFactory(javaType, 
> xmlType);
>   -            }
>            }
>    
>            // Try to get the serializer associated with this pair
>   @@ -393,12 +385,6 @@
>                if (xmlType == null) {
>                    return null;
>                }
>   -
>   -            // If we're doing autoTyping, we can use the default.
>   -            if (doAutoTypes &&
>   -                    
> xmlType.getNamespaceURI().equals(Constants.NS_URI_JAVA)) {
>   -                return xmlType;
>   -            }
>            }
>    
>            // Try to get the serializer associated with this pair
>   @@ -458,16 +444,6 @@
>                if (javaType == null) {
>                    return null;
>                }
>   -
>   -            if (doAutoTypes &&
>   -                
> Constants.NS_URI_JAVA.equals(xmlType.getNamespaceURI())) {
>   -                try {
>   -                    javaType = 
> ClassUtils.forName(xmlType.getLocalPart());
>   -                } catch (ClassNotFoundException e) {
>   -                    return null;
>   -                }
>   -                return new 
> BeanDeserializerFactory(javaType, xmlType);
>   -            }
>            }
>    
>            Pair pair = new Pair(javaType, xmlType);
>   @@ -567,27 +543,63 @@
>                xmlType = pair.xmlType;
>            }
>    
>   -        if (xmlType == null && doAutoTypes) {
>   -            xmlType = new QName(Constants.NS_URI_JAVA,
>   -                                javaType.getName());
>   -        }
>   -
>            // Can only detect arrays via code
>            if (xmlType == null && (javaType.isArray() ||
>   -             javaType == List.class ||
>   -             List.class.isAssignableFrom(javaType))) {
>   +            javaType == List.class ||
>   +            List.class.isAssignableFrom(javaType))) {
>    
>   -            // get the registered array if any
>   -            pair = (Pair) class2Pair.get(Object[].class);
>   -            // TODO: it always returns the last registered one,
>   -            //  so that's why the soap 1.2 typemappings have to 
>   -            //  move to an other registry to differentiate them
>   -            if (pair != null) {
>   -                xmlType = pair.xmlType;
>   -            } else {
>   -                xmlType = Constants.SOAP_ARRAY;
>   +            /* If auto-typing is on, generate a namespace 
> for this array
>   +             * intelligently, then register it's javaType 
> and xmlType. Also
>   +             * make sure the class isn't derived from 
> List, because they
>   +             * should be serialized as an anyType array.
>   +             */
>   +            if ( doAutoTypes && 
>   +                 javaType != List.class &&
>   +                 !List.class.isAssignableFrom(javaType) )
>   +            {
>   +                xmlType = new QName(
>   +                    Namespaces.makeNamespace( javaType.getName() ),
>   +                    Types.getLocalNameFromFullName( 
> javaType.getName() ) );
>   +                
>   +                register( javaType,
>   +                          xmlType, 
>   +                          new ArraySerializerFactory(),
>   +                          new ArrayDeserializerFactory() );
>   +            }
>   +            else
>   +            {
>   +                // get the registered array if any
>   +                pair = (Pair) class2Pair.get(Object[].class);
>   +                // TODO: it always returns the last registered one,
>   +                //  so that's why the soap 1.2 
> typemappings have to 
>   +                //  move to an other registry to differentiate them
>   +                if (pair != null) {
>   +                    xmlType = pair.xmlType;
>   +                } else {
>   +                    xmlType = Constants.SOAP_ARRAY;
>   +                }
>                }
>            }
>   +        
>   +        /* If the class isn't an array or List and 
> auto-typing is turned on,
>   +         * register the class and it's type as beans.
>   +         */
>   +        if (xmlType == null && doAutoTypes)
>   +        {   
>   +            xmlType = new QName(
>   +                Namespaces.makeNamespace( javaType.getName() ),
>   +                Types.getLocalNameFromFullName( 
> javaType.getName() ) );
>   +            
>   +            /* If doAutoTypes is set, register a new type 
> mapping for the
>   +             * java class with the above QName.  This way, 
> when getSerializer()
>   +             * and getDeserializer() are called, this 
> QName is returned and
>   +             * these methods do not need to worry about 
> creating a serializer.
>   +             */
>   +            register( javaType,
>   +                      xmlType, 
>   +                      new BeanSerializerFactory(javaType, xmlType),
>   +                      new 
> BeanDeserializerFactory(javaType, xmlType) );
>   +        }
>    
>            //log.debug("getTypeQName xmlType =" + xmlType);
>            return xmlType;
>   @@ -609,15 +621,6 @@
>                javaType = delegate.getClassForQName(xmlType);
>            } else if (pair != null) {
>                javaType = pair.javaType;
>   -        }
>   -
>   -        if (javaType == null && doAutoTypes &&
>   -                
> Constants.NS_URI_JAVA.equals(xmlType.getNamespaceURI())) {
>   -            // Classloader?
>   -            try {
>   -                javaType = 
> ClassUtils.forName(xmlType.getLocalPart());
>   -            } catch (ClassNotFoundException e) {
>   -            }
>            }
>    
>            //log.debug("getClassForQName javaType =" + javaType);
>   
>   
>   
> 

Reply via email to