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 Davanum Srinivas <di...@yahoo.com> on 2003/07/02 19:12:10 UTC

RE: cvs commit: xml-axis/java/src/org/apache/axis/encoding TypeMa ppingImpl.java

Glen,

I'll let Dan comment on the patch.

-- dims

--- Glen Daniels <gd...@macromedia.com> wrote:
> 
> 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: dims@apache.org [mailto:dims@apache.org] 
> > Sent: Wednesday, July 02, 2003 12:48 PM
> > To: xml-axis-cvs@apache.org
> > 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 dan@envoisolutions.com (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,
> 
=== message truncated ===


=====
Davanum Srinivas - http://webservices.apache.org/~dims/

__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com