dims        02/04/16 11:56:16

  Modified:    java/src/org/apache/axis/encoding/ser BeanDeserializer.java
                        BeanPropertyTarget.java BeanSerializer.java
                        SimpleDeserializer.java SimpleSerializer.java
  Added:       java/src/org/apache/axis/utils BeanPropertyDescriptor.java
                        BeanUtils.java
  Removed:     java/src/org/apache/axis/encoding/ser
                        BeanPropertyDescriptor.java
  Log:
  - Move Beans related code into BeanUtils under org.apache.axis.utils package
  - Cleanup imports a bit
  
  Revision  Changes    Path
  1.19      +11 -25    
xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java
  
  Index: BeanDeserializer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- BeanDeserializer.java     2 Apr 2002 21:24:40 -0000       1.18
  +++ BeanDeserializer.java     16 Apr 2002 18:56:16 -0000      1.19
  @@ -55,36 +55,22 @@
   
   package org.apache.axis.encoding.ser;
   
  -import org.xml.sax.Attributes;
  -import org.xml.sax.SAXException;
  -
  -import javax.xml.rpc.namespace.QName;
  -import java.io.IOException;
  -import org.apache.axis.message.SOAPHandler;
  -
  -import org.apache.axis.encoding.Serializer;
  -import org.apache.axis.encoding.SerializerFactory;
  -import org.apache.axis.encoding.SerializationContext;
  -import org.apache.axis.encoding.Deserializer;
  -import org.apache.axis.encoding.DeserializerFactory;
  +import org.apache.axis.description.TypeDesc;
   import org.apache.axis.encoding.DeserializationContext;
  +import org.apache.axis.encoding.Deserializer;
   import org.apache.axis.encoding.DeserializerImpl;
   import org.apache.axis.encoding.TypeMapping;
  +import org.apache.axis.message.SOAPHandler;
  +import org.apache.axis.utils.BeanPropertyDescriptor;
   import org.apache.axis.utils.JavaUtils;
  -import org.apache.axis.Constants;
  -import org.apache.axis.description.TypeDesc;
  -
  -import java.beans.IntrospectionException;
  -
  -import java.lang.reflect.Method;
  -import java.beans.IntrospectionException;
  +import org.apache.axis.utils.BeanUtils;
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
  -import java.beans.Introspector;
  -import java.beans.PropertyDescriptor;
  -import java.io.ObjectStreamField;
  +import org.xml.sax.Attributes;
  +import org.xml.sax.SAXException;
  +
  +import javax.xml.rpc.namespace.QName;
   import java.io.Serializable;
  -import java.util.Vector;
   import java.util.HashMap;
   
   /**
  @@ -121,7 +107,7 @@
           this.javaType = javaType;
           this.typeDesc = typeDesc;
           // Get a list of the bean properties
  -        BeanPropertyDescriptor[] pd = BeanSerializer.getPd(javaType);
  +        BeanPropertyDescriptor[] pd = BeanUtils.getPd(javaType);
           // loop through properties and grab the names for later
           for (int i = 0; i < pd.length; i++) {
               BeanPropertyDescriptor descriptor = pd[i];
  @@ -288,7 +274,7 @@
               String attrName = attributes.getLocalName(i);
   
               // look for the attribute property
  -            BeanPropertyDescriptor bpd = 
  +            BeanPropertyDescriptor bpd =
                       (BeanPropertyDescriptor) propertyMap.get(fieldName);
               if (bpd != null) {
                   if (bpd.getWriteMethod() == null ) continue ;
  
  
  
  1.5       +4 -5      
xml-axis/java/src/org/apache/axis/encoding/ser/BeanPropertyTarget.java
  
  Index: BeanPropertyTarget.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanPropertyTarget.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- BeanPropertyTarget.java   26 Feb 2002 21:15:33 -0000      1.4
  +++ BeanPropertyTarget.java   16 Apr 2002 18:56:16 -0000      1.5
  @@ -55,13 +55,12 @@
   
   package org.apache.axis.encoding.ser;
   
  -import org.xml.sax.SAXException;
  +import org.apache.axis.encoding.Target;
  +import org.apache.axis.utils.BeanPropertyDescriptor;
  +import org.apache.axis.utils.JavaUtils;
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
  -
  -import java.lang.reflect.Method;
  -import org.apache.axis.utils.JavaUtils;
  -import org.apache.axis.encoding.Target;
  +import org.xml.sax.SAXException;
   
   /**
    * Class which knows how to update a bean property
  
  
  
  1.27      +3 -56     
xml-axis/java/src/org/apache/axis/encoding/ser/BeanSerializer.java
  
  Index: BeanSerializer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanSerializer.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- BeanSerializer.java       9 Apr 2002 23:41:12 -0000       1.26
  +++ BeanSerializer.java       16 Apr 2002 18:56:16 -0000      1.27
  @@ -62,7 +62,9 @@
   import org.apache.axis.description.TypeDesc;
   import org.apache.axis.encoding.SerializationContext;
   import org.apache.axis.encoding.Serializer;
  +import org.apache.axis.utils.BeanPropertyDescriptor;
   import org.apache.axis.utils.JavaUtils;
  +import org.apache.axis.utils.BeanUtils;
   import org.apache.axis.wsdl.fromJava.ClassRep;
   import org.apache.axis.wsdl.fromJava.FieldRep;
   import org.apache.axis.wsdl.fromJava.Types;
  @@ -114,7 +116,7 @@
           this.xmlType = xmlType;
           this.javaType = javaType;
           this.typeDesc = typeDesc;
  -        propertyDescriptor = getPd(javaType);
  +        propertyDescriptor = BeanUtils.getPd(javaType);
       }
   
       /**
  @@ -216,61 +218,6 @@
           context.endElement();
       }
   
  -    /**
  -     * Create a BeanPropertyDescriptor array for the indicated class.
  -     */
  -    static BeanPropertyDescriptor[] getPd(Class javaType) {
  -        BeanPropertyDescriptor[] pd;
  -        try {
  -            PropertyDescriptor[] rawPd = 
Introspector.getBeanInfo(javaType).getPropertyDescriptors();
  -            pd = BeanPropertyDescriptor.processPropertyDescriptors(rawPd,javaType);
  -        } catch (Exception e) {
  -            // this should never happen
  -            throw new InternalException(e);
  -        }
  -        return pd;
  -    }
  -
  -    /**
  -     * Return a list of properties in the bean which should be attributes
  -     */
  -    static Vector getBeanAttributes(Class javaType, TypeDesc typeDesc) {
  -        Vector ret = new Vector();
  -
  -        if (typeDesc == null) {
  -            // !!! Support old-style beanAttributeNames for now
  -
  -            // See if this object defined the 'getAttributeElements' function
  -            // which returns a Vector of property names that are attributes
  -            try {
  -                Method getAttributeElements =
  -                        javaType.getMethod("getAttributeElements",
  -                                           new Class [] {});
  -                // get string array
  -                String[] array = (String[])getAttributeElements.invoke(null, 
noArgs);
  -
  -                // convert it to a Vector
  -                ret = new Vector(array.length);
  -                for (int i = 0; i < array.length; i++) {
  -                    ret.add(array[i]);
  -                }
  -            } catch (Exception e) {
  -                ret.clear();
  -            }
  -        } else {
  -            FieldDesc [] fields = typeDesc.getFields();
  -            if (fields != null) {
  -                for (int i = 0; i < fields.length; i++) {
  -                    FieldDesc field = fields[i];
  -                    if (!field.isElement()) {
  -                        ret.add(field.getFieldName());
  -                    }
  -                }
  -            }
  -        }
  -
  -        return ret;
  -    }
   
   
       public String getMechanismType() { return Constants.AXIS_SAX; }
  
  
  
  1.11      +17 -27    
xml-axis/java/src/org/apache/axis/encoding/ser/SimpleDeserializer.java
  
  Index: SimpleDeserializer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/SimpleDeserializer.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- SimpleDeserializer.java   9 Apr 2002 15:41:29 -0000       1.10
  +++ SimpleDeserializer.java   16 Apr 2002 18:56:16 -0000      1.11
  @@ -55,36 +55,26 @@
   
   package org.apache.axis.encoding.ser;
   
  -import java.beans.IntrospectionException;
  -import java.io.IOException;
  -import java.lang.reflect.Constructor;
  -import java.lang.reflect.InvocationTargetException;
  -import java.lang.reflect.Method;
  -import java.util.Vector;
  -import java.util.HashMap;
  -import java.util.Map;
  -import java.util.Set;
  -import java.util.Iterator;
  -
  -import org.apache.axis.InternalException;
   import org.apache.axis.description.TypeDesc;
  +import org.apache.axis.encoding.DeserializationContext;
  +import org.apache.axis.encoding.Deserializer;
  +import org.apache.axis.encoding.DeserializerImpl;
  +import org.apache.axis.encoding.SimpleType;
  +import org.apache.axis.encoding.TypeMapping;
   import org.apache.axis.message.SOAPHandler;
  +import org.apache.axis.utils.BeanPropertyDescriptor;
   import org.apache.axis.utils.JavaUtils;
  -
  -import javax.xml.rpc.namespace.QName;
  -
  +import org.apache.axis.utils.BeanUtils;
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
   
  -import org.apache.axis.encoding.Serializer;
  -import org.apache.axis.encoding.SerializerFactory;
  -import org.apache.axis.encoding.SerializationContext;
  -import org.apache.axis.encoding.Deserializer;
  -import org.apache.axis.encoding.DeserializerFactory;
  -import org.apache.axis.encoding.DeserializationContext;
  -import org.apache.axis.encoding.DeserializerImpl;
  -import org.apache.axis.encoding.TypeMapping;
  -import org.apache.axis.encoding.SimpleType;
  +import javax.xml.rpc.namespace.QName;
  +import java.lang.reflect.Constructor;
  +import java.lang.reflect.InvocationTargetException;
  +import java.util.HashMap;
  +import java.util.Iterator;
  +import java.util.Map;
  +import java.util.Set;
   
   /**
    * A deserializer for any simple type with a (String) constructor.  Note:
  @@ -118,7 +108,7 @@
           
           // if this type is a SimpleType bean, get bean properties
           if (SimpleType.class.isAssignableFrom(javaType)) {
  -            this.pd = BeanSerializer.getPd(javaType);
  +            this.pd = BeanUtils.getPd(javaType);
               // loop through properties and grab the names for later
               for (int i = 0; i < pd.length; i++) {
                   BeanPropertyDescriptor descriptor = pd[i];
  @@ -135,7 +125,7 @@
           
           // if this type is a SimpleType bean, get bean properties
           if (SimpleType.class.isAssignableFrom(javaType)) {
  -            this.pd = BeanSerializer.getPd(javaType);
  +            this.pd = BeanUtils.getPd(javaType);
               // loop through properties and grab the names for later
               for (int i = 0; i < pd.length; i++) {
                   BeanPropertyDescriptor descriptor = pd[i];
  @@ -346,7 +336,7 @@
               String name = (String) entry.getKey();
               Object val = entry.getValue();
               
  -            BeanPropertyDescriptor bpd = 
  +            BeanPropertyDescriptor bpd =
                       (BeanPropertyDescriptor) propertyMap.get(name);
               if (bpd.getWriteMethod() == null) continue;
               try {
  
  
  
  1.10      +18 -26    
xml-axis/java/src/org/apache/axis/encoding/ser/SimpleSerializer.java
  
  Index: SimpleSerializer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/SimpleSerializer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SimpleSerializer.java     28 Mar 2002 18:41:16 -0000      1.9
  +++ SimpleSerializer.java     16 Apr 2002 18:56:16 -0000      1.10
  @@ -55,36 +55,28 @@
   
   package org.apache.axis.encoding.ser;
   
  +import org.apache.axis.AxisFault;
  +import org.apache.axis.Constants;
  +import org.apache.axis.description.FieldDesc;
  +import org.apache.axis.description.TypeDesc;
  +import org.apache.axis.encoding.SerializationContext;
  +import org.apache.axis.encoding.Serializer;
  +import org.apache.axis.encoding.SimpleType;
  +import org.apache.axis.utils.BeanPropertyDescriptor;
  +import org.apache.axis.utils.JavaUtils;
  +import org.apache.axis.utils.XMLUtils;
  +import org.apache.axis.utils.BeanUtils;
  +import org.apache.axis.wsdl.fromJava.ClassRep;
  +import org.apache.axis.wsdl.fromJava.FieldRep;
  +import org.apache.axis.wsdl.fromJava.Types;
  +import org.w3c.dom.Element;
   import org.xml.sax.Attributes;
  -import org.xml.sax.SAXException;
   import org.xml.sax.helpers.AttributesImpl;
   
   import javax.xml.rpc.namespace.QName;
   import java.io.IOException;
  -import java.util.Vector;
   import java.lang.reflect.Method;
  -import java.lang.reflect.Field;
  -
  -import org.apache.axis.Constants;
  -import org.apache.axis.AxisFault;
  -import org.apache.axis.description.TypeDesc;
  -import org.apache.axis.description.FieldDesc;
  -import org.apache.axis.wsdl.fromJava.Types;
  -import org.apache.axis.wsdl.fromJava.ClassRep;
  -import org.apache.axis.wsdl.fromJava.FieldRep;
  -import org.apache.axis.wsdl.toJava.Utils;
  -import org.apache.axis.utils.JavaUtils;
  -import org.apache.axis.utils.XMLUtils;
  -import org.apache.axis.encoding.Serializer;
  -import org.apache.axis.encoding.SerializerFactory;
  -import org.apache.axis.encoding.SerializationContext;
  -import org.apache.axis.encoding.Deserializer;
  -import org.apache.axis.encoding.DeserializerFactory;
  -import org.apache.axis.encoding.DeserializationContext;
  -import org.apache.axis.encoding.DeserializerImpl;
  -import org.apache.axis.encoding.SimpleType;
  -import org.w3c.dom.Element;
  -import org.w3c.dom.Document;
  +import java.util.Vector;
   /**
    * Serializer for primitives and anything simple whose value is obtained with 
toString()
    *
  @@ -104,7 +96,7 @@
           
           if (SimpleType.class.isAssignableFrom(javaType)) {
               // get the bean properties and the list of attributes from the bean
  -            propertyDescriptor = BeanSerializer.getPd(javaType);
  +            propertyDescriptor = BeanUtils.getPd(javaType);
               typeDesc = TypeDesc.getTypeDescForClass(javaType);
           }
       }
  @@ -115,7 +107,7 @@
           
           if (SimpleType.class.isAssignableFrom(javaType)) {
               // get the bean properties and the list of attributes from the bean
  -            propertyDescriptor = BeanSerializer.getPd(javaType);
  +            propertyDescriptor = BeanUtils.getPd(javaType);
           }
       }
       /**
  
  
  
  1.1                  
xml-axis/java/src/org/apache/axis/utils/BeanPropertyDescriptor.java
  
  Index: BeanPropertyDescriptor.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:  
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  package org.apache.axis.utils;
  
  import java.io.ByteArrayOutputStream;
  
  import org.apache.axis.utils.JavaUtils;
  
  import java.lang.reflect.Method;
  import java.beans.IntrospectionException;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import java.beans.Introspector;
  import java.beans.PropertyDescriptor;
  
  /**
   * This class is essentially a copy of the PropertyDescriptor information, except
   * that the values in it can be modified.
   * @author Rich Scheuerle <[EMAIL PROTECTED]>
   **/
  public class BeanPropertyDescriptor
  {
      protected static Log log =
          LogFactory.getLog(BeanPropertyDescriptor.class.getName());
  
      private String name;
      private Method getter;
      private Method setter;
      
      public BeanPropertyDescriptor(String _name, Method _getter, Method _setter) {
          name = _name;
          getter = _getter;
          setter = _setter;
      }
      public Method getReadMethod()  { return getter; }
      public Method getWriteMethod() { return setter; }
      public String getName() {return name;}
      public Class getType() {return getter.getReturnType(); }
  
  }
  
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/utils/BeanUtils.java
  
  Index: BeanUtils.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  package org.apache.axis.utils;
  
  import org.apache.axis.InternalException;
  import org.apache.axis.description.TypeDesc;
  import org.apache.axis.description.FieldDesc;
  
  import java.beans.PropertyDescriptor;
  import java.beans.Introspector;
  import java.util.Vector;
  import java.lang.reflect.Method;
  
  public class BeanUtils {
  
      public static final Object[] noArgs = new Object[] {};  // For convenience
  
      /**
       * Create a BeanPropertyDescriptor array for the indicated class.
       */
      public static BeanPropertyDescriptor[] getPd(Class javaType) {
          BeanPropertyDescriptor[] pd;
          try {
              PropertyDescriptor[] rawPd = 
Introspector.getBeanInfo(javaType).getPropertyDescriptors();
              pd = processPropertyDescriptors(rawPd,javaType);
          } catch (Exception e) {
              // this should never happen
              throw new InternalException(e);
          }
          return pd;
      }
  
      /**
       * Return a list of properties in the bean which should be attributes
       */
      public static Vector getBeanAttributes(Class javaType, TypeDesc typeDesc) {
          Vector ret = new Vector();
  
          if (typeDesc == null) {
              // !!! Support old-style beanAttributeNames for now
  
              // See if this object defined the 'getAttributeElements' function
              // which returns a Vector of property names that are attributes
              try {
                  Method getAttributeElements =
                          javaType.getMethod("getAttributeElements",
                                             new Class [] {});
                  // get string array
                  String[] array = (String[])getAttributeElements.invoke(null, noArgs);
  
                  // convert it to a Vector
                  ret = new Vector(array.length);
                  for (int i = 0; i < array.length; i++) {
                      ret.add(array[i]);
                  }
              } catch (Exception e) {
                  ret.clear();
              }
          } else {
              FieldDesc [] fields = typeDesc.getFields();
              if (fields != null) {
                  for (int i = 0; i < fields.length; i++) {
                      FieldDesc field = fields[i];
                      if (!field.isElement()) {
                          ret.add(field.getFieldName());
                      }
                  }
              }
          }
  
          return ret;
      }
      /**
       * This method attempts to sort the property descriptors to match the
       * order defined in the class.  This is necessary to support
       * xsd:sequence processing, which means that the serialized order of
       * properties must match the xml element order.  (This method assumes that the
       * order of the set methods matches the xml element order...the emitter
       * will always order the set methods according to the xml order.)
       *
       * This routine also looks for set(i, type) and get(i) methods and adjusts the
       * property to use these methods instead.  These methods are generated by the
       * emitter for "collection" of properties (i.e. maxOccurs="unbounded" on an 
element).
       * JAX-RPC is silent on this issue, but web services depend on this kind of 
behaviour.
       * The method signatures were chosen to match bean indexed properties.
       */
      public static BeanPropertyDescriptor[] processPropertyDescriptors(
                    PropertyDescriptor[] rawPd, Class cls) {
          BeanPropertyDescriptor[] myPd = new BeanPropertyDescriptor[rawPd.length];
  
          for (int i=0; i < rawPd.length; i++) {
              myPd[i] = new BeanPropertyDescriptor(rawPd[i].getName(),
                                                 rawPd[i].getReadMethod(),
                                                 rawPd[i].getWriteMethod());
          }
  
          try {
              // Create a new pd array and index into the array
              int index = 0;
  
              // Build a new pd array
              // defined by the order of the get methods.
              BeanPropertyDescriptor[] newPd = new 
BeanPropertyDescriptor[rawPd.length];
              Method[] methods = cls.getMethods();
              for (int i=0; i < methods.length; i++) {
                  Method method = methods[i];
                  if (method.getName().startsWith("set")) {
                      boolean found = false;
                      for (int j=0; j < myPd.length && !found; j++) {
                          if (myPd[j].getWriteMethod() != null &&
                              myPd[j].getWriteMethod().equals(method)) {
                              found = true;
                              newPd[index] = myPd[j];
                              index++;
                          }
                      }
                  }
              }
              // Now if there are any additional property descriptors, add them to the 
end.
              if (index < myPd.length) {
                  for (int m=0; m < myPd.length && index < myPd.length; m++) {
                      boolean found = false;
                      for (int n=0; n < index && !found; n++) {
                          found = (myPd[m]==newPd[n]);
                      }
                      if (!found) {
                          newPd[index] = myPd[m];
                          index++;
                      }
                  }
              }
              // If newPd has same number of elements as myPd, use newPd.
              if (index == myPd.length) {
                  myPd = newPd;
              }
  
              // Get the methods of the class and look for the special set and
              // get methods for property "collections"
              for (int i=0; i < methods.length; i++) {
                  if (methods[i].getName().startsWith("set") &&
                      methods[i].getParameterTypes().length == 2) {
                      for (int j=0; j < methods.length; j++) {
                          if ((methods[j].getName().startsWith("get") ||
                               methods[j].getName().startsWith("is")) &&
                              methods[j].getParameterTypes().length == 1 &&
                              methods[j].getReturnType() == 
methods[i].getParameterTypes()[1] &&
                              methods[j].getParameterTypes()[0] == int.class &&
                              methods[i].getParameterTypes()[0] == int.class) {
                              for (int k=0; k < myPd.length; k++) {
                                  if (myPd[k].getReadMethod() != null &&
                                      myPd[k].getWriteMethod() != null &&
                                      
myPd[k].getReadMethod().getName().equals(methods[j].getName()) &&
                                      
myPd[k].getWriteMethod().getName().equals(methods[i].getName())) {
                                      myPd[k] = new 
BeanPropertyDescriptor(myPd[k].getName(),
                                                                         methods[j],
                                                                         methods[i]);
                                  }
                              }
                          }
                      }
                  }
              }
          } catch (Exception e) {
              // Don't process Property Descriptors if problems occur
              return myPd;
          }
          return myPd;
      }
  }
  
  
  


Reply via email to