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