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 Andreas Veithen <an...@gmail.com> on 2011/08/01 22:36:45 UTC

Re: svn commit: r1149674 - in /axis/axis2/java/core/trunk/modules: adb/src/org/apache/axis2/databinding/typemapping/ adb/src/org/apache/axis2/databinding/utils/ adb/src/org/apache/axis2/rpc/receivers/ adb/test/org/apache/axis2/databinding/utils/ inte

http://wiki.apache.org/ws/FrontPage/Axis2/Code-Conventions

On Fri, Jul 29, 2011 at 03:15, Samisa Abeysinghe
<sa...@gmail.com> wrote:
> Where can I find the coding conventions?
>
> Samisa Abeysinghe
>
> http://samisa-abeysinghe.blogspot.com/
>
> On Sat, Jul 23, 2011 at 1:44 PM, Andreas Veithen <an...@gmail.com>
> wrote:
>>
>> Two comments:
>>
>> * We use spaces instead of tabs. Please change your editor configuration.
>> * The constant name "INNTER_ARRARY_COMPLEX_TYPE_NAME" needs to be fixed.
>>
>> Thanks,
>>
>> Andreas
>>
>> On Fri, Jul 22, 2011 at 20:04,  <sa...@apache.org> wrote:
>> > Author: sagara
>> > Date: Fri Jul 22 18:04:23 2011
>> > New Revision: 1149674
>> >
>> > URL: http://svn.apache.org/viewvc?rev=1149674&view=rev
>> > Log:
>> > Fixed AXIS2-5090  - This fix address following areas.
>> >
>> > ADB support for java Collection and schema generation.
>> > ADB support for complex structures such as Map of List or List of Map
>> > and nested scenarios.
>> > Support for multinational arrays of object types.
>> >
>> > Modified:
>> >
>> >  axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java
>> >
>> >  axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java
>> >
>> >  axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/Constants.java
>> >
>> >  axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/MultirefHelper.java
>> >
>> >  axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java
>> >
>> >  axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java
>> >
>> >  axis/axis2/java/core/trunk/modules/integration/test-resources/generics/generics.wsdl
>> >
>> >  axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/generics/GenericServiceTest.java
>> >
>> >  axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/Company.java
>> >
>> >  axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/RPCCallTest.java
>> >
>> >  axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/RPCServiceClass.java
>> >
>> >  axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java
>> >
>> >  axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/DocLitBareSchemaGenerator.java
>> >
>> > Modified:
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java
>> > URL:
>> > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java?rev=1149674&r1=1149673&r2=1149674&view=diff
>> >
>> > ==============================================================================
>> > ---
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java
>> > (original)
>> > +++
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java
>> > Fri Jul 22 18:04:23 2011
>> > @@ -221,6 +221,9 @@ public class SimpleTypeMapper {
>> >     }
>> >
>> >     public static boolean isSimpleType(Object obj) {
>> > +       if(obj == null){
>> > +               return false;
>> > +       }
>> >         String objClassName = obj.getClass().getName();
>> >         return obj instanceof Calendar || obj instanceof Date ||
>> > isSimpleType(objClassName);
>> >     }
>> > @@ -354,8 +357,11 @@ public class SimpleTypeMapper {
>> >         * @param obj the Class type of particular object.
>> >         * @return true, if is object array
>> >         */
>> > -       public static boolean isObjectArray(Class obj) {
>> > -               if
>> > (obj.getComponentType().getName().equals(Object.class.getName())) {
>> > +       public static boolean isObjectArray(Class obj) {
>> > +               if (obj != null
>> > +                               && obj.getComponentType() != null
>> > +                               && obj.getComponentType().getName()
>> > +
>> > .equals(Object.class.getName())) {
>> >                        return true;
>> >                }
>> >                return false;
>> > @@ -395,4 +401,21 @@ public class SimpleTypeMapper {
>> >                return java.util.Map.class.isAssignableFrom(classType);
>> >        }
>> >
>> > +       /**
>> > +        * Checks weather passed parameter class is a multidimensional
>> > object array.
>> > +        *
>> > +        * @param type the type
>> > +        * @return true, if is multidimensional object array
>> > +        */
>> > +       public static boolean isMultidimensionalObjectArray(Class type)
>> > {
>> > +               Class compType = type.getComponentType();
>> > +               if (compType == null) {
>> > +                       return false;
>> > +               } else if (isObjectArray(compType)) {
>> > +                       return true;
>> > +               } else {
>> > +                       return isMultidimensionalObjectArray(compType);
>> > +               }
>> > +       }
>> > +
>> >  }
>> >
>> > Modified:
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java
>> > URL:
>> > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java?rev=1149674&r1=1149673&r2=1149674&view=diff
>> >
>> > ==============================================================================
>> > ---
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java
>> > (original)
>> > +++
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java
>> > Fri Jul 22 18:04:23 2011
>> > @@ -33,10 +33,21 @@ import java.util.ArrayList;
>> >  import java.util.Collection;
>> >  import java.util.Comparator;
>> >  import java.util.HashMap;
>> > +import java.util.HashSet;
>> >  import java.util.Iterator;
>> > +import java.util.LinkedList;
>> >  import java.util.List;
>> >  import java.util.Map;
>> > +import java.util.NavigableSet;
>> > +import java.util.Queue;
>> > +import java.util.Set;
>> > +import java.util.SortedSet;
>> >  import java.util.TreeMap;
>> > +import java.util.TreeSet;
>> > +import java.util.concurrent.BlockingDeque;
>> > +import java.util.concurrent.BlockingQueue;
>> > +import java.util.concurrent.LinkedBlockingDeque;
>> > +import java.util.concurrent.LinkedBlockingQueue;
>> >
>> >  import javax.activation.DataHandler;
>> >  import javax.xml.namespace.QName;
>> > @@ -156,7 +167,7 @@ public class BeanUtil {
>> >
>> > beanObject.getClass().getPackage().getName());
>> >                 }
>> >
>> > -                elemntNameSpace = new
>> > QName(qNamefortheType.getNamespaceURI(), "elementName");
>> > +                elemntNameSpace = new
>> > QName(qNamefortheType.getNamespaceURI(), "elementName",
>> > qNamefortheType.getPrefix());
>> >             }
>> >             AxisService axisService = null;
>> >             if (MessageContext.getCurrentMessageContext() != null) {
>> > @@ -239,8 +250,39 @@ public class BeanUtil {
>> >                         if (value != null) {
>> >                             for (Object o : (Object[]) value) {
>> >                                 addTypeQname(elemntNameSpace,
>> > propertyQnameValueList,
>> > -                                             property, beanName,
>> > processingDocLitBare);
>> > -                                propertyQnameValueList.add(o);
>> > +                                             property, beanName,
>> > processingDocLitBare);
>> > +                                QName propertyQName = new
>> > QName(elemntNameSpace.getNamespaceURI(),
>> > +
>> > propertyName,
>> > +
>> > elemntNameSpace.getPrefix());
>> > +
>> > +                                                               if
>> > (SimpleTypeMapper
>> > +
>> >         .isObjectArray(o.getClass())
>> > +
>> >         || SimpleTypeMapper
>> > +
>> >                         .isMultidimensionalObjectArray(o
>> > +
>> >                                         .getClass())) {
>> > +
>> > /**
>> > +                                                        * If it is a
>> > Object[] we need to add instance type
>> > +                                                        * attributes to
>> > the response message.
>> > +                                                        * Copied from
>> > ADBXMLStreamReaderImpl.
>> > +                                                        * For inner
>> > Arrary Complex types we use the special local name array - "array"
>> > +                                                        */
>> > +                                                       QName itemName =
>> > new QName(elemntNameSpace.getNamespaceURI(),
>> > +
>> > Constants.INNTER_ARRARY_COMPLEX_TYPE_NAME,
>> > +
>> > elemntNameSpace.getPrefix());
>> > +
>> > propertyQnameValueList.add(getOMElement(propertyQName , (Object[]) o,
>> > +
>> > itemName, qualified, typeTable));
>> > +                                } else {
>> > +
>> > if(SimpleTypeMapper.isObjectArray(value.getClass())){
>> > +                                               OMFactory fac =
>> > OMAbstractFactory.getOMFactory();
>> > +                                       OMElement element =
>> > fac.createOMElement(propertyQName);
>> > +
>> > element.addChild(fac.createOMText(SimpleTypeMapper.getStringValue(o)));
>> > +                                       addInstanceTypeAttribute(fac,
>> > element, o, typeTable);
>> > +
>> > propertyQnameValueList.add(element);
>> > +                                       } else {
>> > +
>> > propertyQnameValueList.add(o);
>> > +                                       }
>> > +                                }
>> > +
>> >                             }
>> >                         } else {
>> >                             addTypeQname(elemntNameSpace,
>> > propertyQnameValueList, property,
>> > @@ -248,30 +290,54 @@ public class BeanUtil {
>> >                             propertyQnameValueList.add(value);
>> >                         }
>> >                     }
>> > -                } else if (SimpleTypeMapper.isCollection(ptype)) {
>> > -                    Collection<?> objList = (Collection<?>) value;
>> > -                    if (objList != null && objList.size() > 0) {
>> > -                        //this was given error , when the array.size =
>> > 0
>> > -                        // and if the array contain simple type , then
>> > the ADBPullParser asked
>> > -                        // PullParser from That simpel type
>> > -                        for (Object o : objList) {
>> > -                            if (SimpleTypeMapper.isSimpleType(o)) {
>> > -                                addTypeQname(elemntNameSpace,
>> > propertyQnameValueList,
>> > -                                             property, beanName,
>> > processingDocLitBare);
>> > -                                propertyQnameValueList.add(o);
>> > -                            } else {
>> > -                                addTypeQname(elemntNameSpace,
>> > propertyQnameValueList,
>> > -                                             property, beanName,
>> > processingDocLitBare);
>> > -                                propertyQnameValueList.add(o);
>> > -                            }
>> > -                        }
>> > -
>> > +                } else  if (SimpleTypeMapper.isCollection(ptype)) {
>> > +                    if (typeTable != null) {
>> > +                       OMFactory fac =
>> > OMAbstractFactory.getOMFactory();
>> > +                       QName qNamefortheType = null;
>> > +                       qNamefortheType = (QName) typeTable
>> > +
>> > .getComplexSchemaMap().get(getClassName(beanClass));
>> > +                       Type genericType =
>> > property.getReadMethod().getGenericReturnType();
>> > +                       OMElement collection =
>> > BeanUtil.getCollectionElement(
>> > +                                       fac, genericType,
>> > +                                       (Collection) value,
>> > propertyName,null,
>> > +                                       qNamefortheType,typeTable,
>> > +                                       qualified);
>> > +//                     addTypeQname(elemntNameSpace,
>> > propertyQnameValueList,
>> > +//                                     property, beanName,
>> > processingDocLitBare);
>> > +                       Iterator childItr = collection.getChildren();
>> > +                       while(childItr.hasNext()){
>> > +                               addTypeQname(elemntNameSpace,
>> > propertyQnameValueList,
>> > +                                               property, beanName,
>> > processingDocLitBare);
>> > +
>> > propertyQnameValueList.add(childItr.next());
>> > +                       }
>> > +
>> >                     } else {
>> > -                        addTypeQname(elemntNameSpace,
>> > propertyQnameValueList, property,
>> > -                                     beanName, processingDocLitBare);
>> > -                        propertyQnameValueList.add(value);
>> > +                        Collection<?> objList = (Collection<?>) value;
>> > +                         if (objList != null && objList.size() > 0) {
>> > +                             //this was given error , when the
>> > array.size = 0
>> > +                             // and if the array contain simple type ,
>> > then the ADBPullParser asked
>> > +                             // PullParser from That simpel type
>> > +                             for (Object o : objList) {
>> > +                                 if (SimpleTypeMapper.isSimpleType(o))
>> > {
>> > +                                     addTypeQname(elemntNameSpace,
>> > propertyQnameValueList,
>> > +                                                  property, beanName,
>> > processingDocLitBare);
>> > +                                     propertyQnameValueList.add(o);
>> > +                                 } else {
>> > +                                     addTypeQname(elemntNameSpace,
>> > propertyQnameValueList,
>> > +                                                  property, beanName,
>> > processingDocLitBare);
>> > +                                     propertyQnameValueList.add(o);
>> > +                                 }
>> > +                             }
>> > +
>> > +                         } else {
>> > +                             addTypeQname(elemntNameSpace,
>> > propertyQnameValueList, property,
>> > +                                          beanName,
>> > processingDocLitBare);
>> > +                             propertyQnameValueList.add(value);
>> > +                         }
>> >                     }
>> > -                               } else if
>> > (SimpleTypeMapper.isMap(ptype)) {
>> > +
>> > +
>> > +                } else if (SimpleTypeMapper.isMap(ptype)) {
>> >                                        OMFactory fac =
>> > OMAbstractFactory.getOMFactory();
>> >                                        QName qNamefortheType = (QName)
>> > typeTable
>> >
>> >  .getComplexSchemaMap().get(getClassName(beanClass));
>> > @@ -526,8 +592,9 @@ public class BeanUtil {
>> >                                 partObj =
>> > SimpleTypeMapper.getHashSet((OMElement)
>> >                                         parts.getParent(),
>> > prty.getName());
>> >                             } else if
>> > (SimpleTypeMapper.isCollection(parameters)) {
>> > -                                partObj =
>> > SimpleTypeMapper.getArrayList((OMElement)
>> > -                                        parts.getParent(),
>> > prty.getName());
>> > +                               Type type =
>> > prty.getReadMethod().getGenericReturnType();
>> > +                               partObj =
>> > processGenericCollection(parts, type, null, objectSupplier);
>> > +
>> >                             } else if
>> > (SimpleTypeMapper.isDataHandler(parameters)) {
>> >                                 partObj =
>> > SimpleTypeMapper.getDataHandler(parts);
>> >                             } else if (parameters.isArray()) {
>> > @@ -732,8 +799,16 @@ public class BeanUtil {
>> >             if (genericParameterTypes != null) {
>> >                 genericType = genericParameterTypes[count];
>> >             }
>> > -            omElement = processElement(classType, omElement, helper,
>> > parts,
>> > -                                       currentLocalName, retObjs,
>> > count, objectSupplier, genericType);
>> > +            /*
>> > +             * In bare invocation "parameterNames" comes as null value.
>> > +             */
>> > +            boolean bare = false;
>> > +            if(parameterNames == null){
>> > +               bare = true;
>> > +            }
>> > +
>> > +                       omElement = processElement(classType, omElement,
>> > helper, parts,
>> > +                                       currentLocalName, retObjs,
>> > count, objectSupplier, genericType, bare);
>> >             while (omElement != null) {
>> >                 count++;
>> >                 // if the local part is not match. this means element is
>> > not present
>> > @@ -777,14 +852,28 @@ public class BeanUtil {
>> >         return retObjs;
>> >     }
>> >
>> > +       private static OMElement processElement(Class classType,
>> > +                       OMElement omElement, MultirefHelper helper,
>> > Iterator parts,
>> > +                       String currentLocalName, Object[] retObjs, int
>> > count,
>> > +                       ObjectSupplier objectSupplier, Type genericType)
>> > throws AxisFault {
>> > +
>> > +               return processElement(classType, omElement, helper,
>> > parts,
>> > +                               currentLocalName, retObjs, count,
>> > objectSupplier, genericType, false);
>> > +
>> > +       }
>> >     private static OMElement processElement(Class classType, OMElement
>> > omElement,
>> >                                             MultirefHelper helper,
>> > Iterator parts,
>> >                                             String currentLocalName,
>> >                                             Object[] retObjs,
>> >                                             int count,
>> >                                             ObjectSupplier
>> > objectSupplier,
>> > -                                            Type genericType) throws
>> > AxisFault {
>> > +                                            Type genericType, boolean
>> > bare) throws AxisFault {
>> >         Object objValue;
>> > +        boolean isRef = false;
>> > +        OMAttribute omatribute =
>> > MultirefHelper.processRefAtt(omElement);
>> > +        if (omatribute != null) {
>> > +            isRef = true;
>> > +        }
>> >         if (classType.isArray()) {
>> >             boolean done = true;
>> >             ArrayList<Object> valueList = new ArrayList<Object>();
>> > @@ -821,29 +910,78 @@ public class BeanUtil {
>> >             if (!done) {
>> >                 return omElement;
>> >             }
>> > +
>> > +        } else if(SimpleTypeMapper.isCollection(classType) && ! isRef){
>> > +               if(bare){
>> > +                       OMElement[] toReturn = new OMElement[1];
>> > +                       parts = omElement.getChildren();
>> > +               retObjs[count] =
>> > processGenericCollection(omElement.getFirstElement(), toReturn, genericType,
>> > helper, objectSupplier, parts,bare);
>> > +               OMNode node = omElement.getNextOMSibling();
>> > +               while(node != null){
>> > +
>> > if(OMElement.class.isAssignableFrom(node.getClass())){
>> > +                               return (OMElement) node;
>> > +                       } else {
>> > +                               node = node.getNextOMSibling();
>> > +                       }
>> > +               }
>> > +
>> > +               } else {
>> > +               OMElement[] toReturn = new OMElement[1];
>> > +               retObjs[count] = processGenericCollection(omElement,
>> > toReturn, genericType, helper, objectSupplier, parts,bare);
>> > +                if (toReturn[0] != null) {
>> > +                     return toReturn[0];
>> > +                 }
>> > +               }
>> >         } else {
>> >             //handling refs
>> >             retObjs[count] = processObject(omElement, classType, helper,
>> > false, objectSupplier, genericType);
>> > +
>> > +
>> >         }
>> >         return null;
>> >     }
>> >
>> > -    private static List<Object> processGenericsElement(Class classType,
>> > OMElement omElement,
>> > +    private static Collection<Object> processGenericsElement(Type
>> > classType, OMElement omElement,
>> >                                                MultirefHelper helper,
>> > Iterator parts,
>> >                                                ObjectSupplier
>> > objectSupplier,
>> >                                                Type genericType) throws
>> > AxisFault {
>> >         Object objValue;
>> > -        ArrayList<Object> valueList = new ArrayList<Object>();
>> > +        Collection<Object> valueList =
>> > getCollectionInstance(genericType);
>> >         while (parts.hasNext()) {
>> >             objValue = parts.next();
>> > +            Object o;
>> >             if (objValue instanceof OMElement) {
>> >                 omElement = (OMElement) objValue;
>> >             } else {
>> >                 continue;
>> >             }
>> > -            Object o = processObject(omElement, classType,
>> > -                                     helper, true, objectSupplier,
>> > genericType);
>> > -            valueList.add(o);
>> > +                       if (classType instanceof ParameterizedType) {
>> > +                               ParameterizedType parameterizedClassType
>> > = (ParameterizedType) classType;
>> > +                               if (Collection.class
>> > +
>> > .isAssignableFrom((Class<?>) parameterizedClassType
>> > +
>> > .getRawType())) {
>> > +                                       o =
>> > processGenericCollection(omElement.getFirstElement(),
>> > +                                                       classType,
>> > helper, objectSupplier);
>> > +                               } else if (Map.class
>> > +
>> > .isAssignableFrom((Class<?>) parameterizedClassType
>> > +
>> > .getRawType())) {
>> > +                                       o = processGenericsMapElement(
>> > +
>> > parameterizedClassType.getActualTypeArguments(),
>> > +                                                       omElement,
>> > helper, omElement.getChildren(), objectSupplier,
>> > +
>> > parameterizedClassType);
>> > +                               } else {
>> > +                                       o = processObject(omElement,
>> > (Class) classType,
>> > +                                helper, true, objectSupplier,
>> > genericType);
>> > +                               }
>> > +
>> > +               } else {
>> > +                       o = processObject(omElement, (Class) classType,
>> > +                         helper, true, objectSupplier, genericType);
>> > +
>> > +               }
>> > +
>> > +                       valueList.add(o);
>> > +
>> >         }
>> >         return valueList;
>> >     }
>> > @@ -877,7 +1015,7 @@ public class BeanUtil {
>> >                 if (helper.getObject(ref) != null) {
>> >                     return helper.getObject(ref);
>> >                 } else {
>> > -                    return helper.processRef(classType, ref,
>> > objectSupplier);
>> > +                    return helper.processRef(classType, generictype,
>> > ref, objectSupplier);
>> >                 }
>> >             } else {
>> >                 OMAttribute attribute = omElement.getAttribute(
>> > @@ -893,14 +1031,8 @@ public class BeanUtil {
>> >                         return getSimpleTypeObjectChecked(classType,
>> > omElement);
>> >                     }
>> >                 } else if (SimpleTypeMapper.isCollection(classType)) {
>> > -                    if (generictype != null && (generictype instanceof
>> > ParameterizedType)) {
>> > -                        ParameterizedType aType = (ParameterizedType)
>> > generictype;
>> > -                        Type[] parameterArgTypes =
>> > aType.getActualTypeArguments();
>> > -                        Type parameter = parameterArgTypes[0];
>> > -                        Iterator parts = omElement.getChildElements();
>> > -                        return processGenericsElement((Class)
>> > parameter, omElement, helper, parts, objectSupplier, generictype);
>> > -                    }
>> > -                    return SimpleTypeMapper.getArrayList(omElement);
>> > +                       return processGenericCollection(omElement,
>> > generictype, null, objectSupplier);
>> > +
>> >                 } else if (SimpleTypeMapper.isDataHandler(classType)) {
>> >                     return SimpleTypeMapper.getDataHandler(omElement);
>> >
>> > @@ -977,10 +1109,26 @@ public class BeanUtil {
>> >                     }
>> >                 } else {
>> >                     // this happens at the server side. this means it is
>> > an multidimentional array.
>> > -                    objects.add(partName);
>> > -                    objects.add(arg);
>> > +                                       objects.add(partName);
>> > +                                       if
>> > (SimpleTypeMapper.isObjectArray(arg.getClass())
>> > +                                                       ||
>> > SimpleTypeMapper
>> > +
>> > .isMultidimensionalObjectArray(arg
>> > +
>> >                 .getClass())) {
>> > +                                               /**
>> > +                                                * If it is a Object[]
>> > we need to add instance type
>> > +                                                * attributes to the
>> > response message.
>> > +                                                * Copied from
>> > ADBXMLStreamReaderImpl.
>> > +                                                * For inner Arrary
>> > Complex types we use the special local name array - "array"
>> > +                                                */
>> > +                                               QName itemName = new
>> > QName(partName.getNamespaceURI(),
>> > +
>> > Constants.INNTER_ARRARY_COMPLEX_TYPE_NAME,
>> > +
>> > partName.getPrefix());
>> > +
>> > objects.add(getOMElement(partName, (Object[]) arg,
>> > +
>> > itemName, qualifed, typeTable));
>> > +                                       } else {
>> > +                                               objects.add(arg);
>> > +                                       }
>> >                 }
>> > -
>> >             } else {
>> >                 if (SimpleTypeMapper.isSimpleType(arg)) {
>> >                        OMElement element;
>> > @@ -1234,7 +1382,7 @@ public class BeanUtil {
>> >         * @return a instance of java.util.Map
>> >         * @throws AxisFault the axis fault
>> >         */
>> > -       private static Map<Object,Object>
>> > processGenericsMapElement(Type[] parameterArgTypes,
>> > +       public static Map<Object,Object>
>> > processGenericsMapElement(Type[] parameterArgTypes,
>> >                        OMElement omElement, MultirefHelper helper,
>> > Iterator parts,
>> >                        ObjectSupplier objectSupplier, Type genericType)
>> > throws AxisFault {
>> >                Object objValue;
>> > @@ -1315,22 +1463,44 @@ public class BeanUtil {
>> >                        if (key != null) {
>> >                                value = results.get(key);
>> >                                List<Object> properties = new
>> > ArrayList<Object>();
>> > +                               QName keyName = new
>> > QName(ns.getNamespaceURI(),
>> > +
>> > org.apache.axis2.Constants.MAP_KEY_ELEMENT_NAME, ns
>> > +
>> > .getPrefix());
>> > +                               QName valueName = new
>> > QName(ns.getNamespaceURI(),
>> > +
>> > org.apache.axis2.Constants.MAP_VALUE_ELEMENT_NAME, ns
>> > +
>> > .getPrefix());
>> >
>> > -                               key = getMapParameterElement(fac,
>> > +                               Object kValue =
>> > getMapParameterElement(fac,
>> >
>> >  org.apache.axis2.Constants.MAP_KEY_ELEMENT_NAME, key,
>> >                                                keyType, typeTable, ns,
>> > elementFormDefault);
>> > -                               properties.add(new
>> > QName(ns.getNamespaceURI(),
>> > -
>> > org.apache.axis2.Constants.MAP_KEY_ELEMENT_NAME, ns
>> > -
>> > .getPrefix()));
>> > -                               properties.add(key);
>> > -
>> > -                               value = getMapParameterElement(fac,
>> > +
>> > +                               Object vValue =
>> > getMapParameterElement(fac,
>> >
>> >  org.apache.axis2.Constants.MAP_VALUE_ELEMENT_NAME,
>> >                                                value, valueType,
>> > typeTable, ns, elementFormDefault);
>> > -                               properties.add(new
>> > QName(ns.getNamespaceURI(),
>> > -
>> > org.apache.axis2.Constants.MAP_VALUE_ELEMENT_NAME, ns
>> > -
>> > .getPrefix()));
>> > -                               properties.add(value);
>> > +
>> > +
>> > if(Iterator.class.isAssignableFrom(kValue.getClass())){
>> > +                                       Iterator valItr = (Iterator)
>> > kValue;
>> > +                                       while (valItr.hasNext()) {
>> > +                                               properties.add(keyName);
>> > +
>> > properties.add(valItr.next());
>> > +                                       }
>> > +                               } else {
>> > +                                       properties.add(keyName);
>> > +                                       properties.add(kValue);
>> > +                               }
>> > +
>> > +
>> > +
>> > if(Iterator.class.isAssignableFrom(vValue.getClass())){
>> > +                                       Iterator valItr = (Iterator)
>> > vValue;
>> > +                                       while (valItr.hasNext()) {
>> > +
>> > properties.add(valueName);
>> > +
>> > properties.add(valItr.next());
>> > +                                       }
>> > +                               } else {
>> > +                                       properties.add(valueName);
>> > +                                       properties.add(vValue);
>> > +                               }
>> > +
>> >
>> >                                XMLStreamReader pullParser = new
>> > ADBXMLStreamReaderImpl(
>> >                                                new QName(
>> > @@ -1371,9 +1541,11 @@ public class BeanUtil {
>> >                                                omElement, helper,
>> > omElement.getChildren(),
>> >                                                objectSupplier,
>> > paraType);
>> >                        } else if (Collection.class
>> > .isAssignableFrom((Class)
>> > -                                       ((ParameterizedType)
>> > paraType).getRawType())) {
>> > -                               //TODO
>> > -                               return null;
>> > +                                       ((ParameterizedType)
>> > paraType).getRawType())) {
>> > +                               return processGenericCollection(
>> > +                                               omElement,
>> > +                                               (ParameterizedType)
>> > paraType,
>> > +                                               helper, objectSupplier);
>> >                        } else {
>> >                                // TODO - support for custom
>> > ParameterizedTypes
>> >                                return null;
>> > @@ -1438,6 +1610,13 @@ public class BeanUtil {
>> >                        }
>> >                        return omValue;
>> >
>> > +               } else if
>> > (SimpleTypeMapper.isCollection(value.getClass())) {
>> > +                       QName elementQName = new
>> > QName(ns.getNamespaceURI(), elementName,
>> > +                                       ns.getPrefix());
>> > +                       return getCollectionElement(fac, valueType,
>> > (Collection) value,
>> > +                                       elementName, null, elementQName,
>> > typeTable,
>> > +
>> > elementFormDefault).getChildren();
>> > +
>> >                } else if (SimpleTypeMapper.isObjectType((Class)
>> > valueType)) {
>> >                        OMElement omValue;
>> >                        omValue = fac.createOMElement(elementName, ns);
>> > @@ -1460,4 +1639,236 @@ public class BeanUtil {
>> >                }
>> >                return value;
>> >        }
>> > +
>> > +       /**
>> > +        * Process generic collection.
>> > +        *
>> > +        * @param omElement the om element
>> > +        * @param generictype the generictype
>> > +        * @param helper the helper
>> > +        * @param objectSupplier the object supplier
>> > +        * @return the collection
>> > +        * @throws AxisFault the axis fault
>> > +        */
>> > +       public static Collection<Object>
>> > processGenericCollection(OMElement omElement,
>> > +                       Type generictype, MultirefHelper helper,
>> > +                       ObjectSupplier objectSupplier) throws AxisFault
>> > {
>> > +       QName partName = omElement.getQName();
>> > +       Type parameter = Object.class;
>> > +       if (generictype != null && (generictype instanceof
>> > ParameterizedType)) {
>> > +           ParameterizedType aType = (ParameterizedType) generictype;
>> > +           Type[] parameterArgTypes = aType.getActualTypeArguments();
>> > +           parameter = parameterArgTypes[0];
>> > +       }
>> > +       /*
>> > +        * Fix for AXIS2-5090. Use siblings with same QName instead of
>> > look for
>> > +        * children because list elements available on same level.
>> > +        */
>> > +       Iterator parts =
>> > omElement.getParent().getChildrenWithName(partName);
>> > +       return processGenericsElement(parameter, omElement, helper,
>> > parts,
>> > +               objectSupplier, generictype);
>> > +       }
>> > +
>> > +       /**
>> > +        * Process collection.
>> > +        *
>> > +        * @param omElement the om element
>> > +        * @param toReturn the to return
>> > +        * @param generictype the generictype
>> > +        * @param helper the helper
>> > +        * @param objectSupplier the object supplier
>> > +        * @param parts the parts
>> > +        * @param bare the bare
>> > +        * @return the collection
>> > +        * @throws AxisFault the axis fault
>> > +        */
>> > +       public static Collection<Object>
>> > processGenericCollection(OMElement omElement,
>> > +               OMElement[] toReturn, Type generictype, MultirefHelper
>> > helper,
>> > +               ObjectSupplier objectSupplier, Iterator parts, boolean
>> > bare)
>> > +               throws AxisFault {
>> > +           String currentLocalName = omElement.getLocalName();
>> > +           Type parameter = Object.class;
>> > +           List<OMElement> eleList = new ArrayList<OMElement>();
>> > +           // in 'Bare' style no need to add first element to the list.
>> > +           if (!bare) {
>> > +               eleList.add(omElement);
>> > +           }
>> > +
>> > +           if (generictype != null && (generictype instanceof
>> > ParameterizedType)) {
>> > +               ParameterizedType aType = (ParameterizedType)
>> > generictype;
>> > +               Type[] parameterArgTypes =
>> > aType.getActualTypeArguments();
>> > +               parameter = parameterArgTypes[0];
>> > +           }
>> > +
>> > +           while (parts.hasNext()) {
>> > +               Object objValue = parts.next();
>> > +               OMElement currElement;
>> > +               if (objValue instanceof OMElement) {
>> > +                   currElement = (OMElement) objValue;
>> > +               } else {
>> > +                   continue;
>> > +               }
>> > +               if (currentLocalName.equals(currElement.getLocalName()))
>> > {
>> > +                   eleList.add(currElement);
>> > +               } else {
>> > +                   // This just a container to bring back un-proceeded
>> > OMEleemnt.
>> > +                   toReturn[0] = currElement;
>> > +                   break;
>> > +               }
>> > +           }
>> > +           return processGenericsElement(parameter, omElement, helper,
>> > +                   eleList.iterator(), objectSupplier, generictype);
>> > +       }
>> > +
>> > +       /**
>> > +        * Gets the collection element.
>> > +        *
>> > +        * @param fac the fac
>> > +        * @param type the type
>> > +        * @param results the results
>> > +        * @param name the name
>> > +        * @param innerName the inner name
>> > +        * @param elementQName the element q name
>> > +        * @param typeTable the type table
>> > +        * @param elementFormDefault the element form default
>> > +        * @return the collection element
>> > +        */
>> > +       public static OMElement getCollectionElement(OMFactory fac, Type
>> > type,
>> > +               Collection results, String name, String innerName,
>> > +               QName elementQName, TypeTable typeTable, boolean
>> > elementFormDefault) {
>> > +
>> > +           String elementName = (innerName == null) ? name : innerName;
>> > +           Iterator<Object> itr = results.iterator();
>> > +           List<Object> properties = new ArrayList<Object>();
>> > +           OMNamespace ns =
>> > fac.createOMNamespace(elementQName.getNamespaceURI(),
>> > +                   elementQName.getPrefix());
>> > +           Type valueType = Object.class;
>> > +           if (type instanceof ParameterizedType) {
>> > +               ParameterizedType aType = (ParameterizedType) type;
>> > +               Type[] parameterArgTypes =
>> > aType.getActualTypeArguments();
>> > +               valueType = parameterArgTypes[0];
>> > +           }
>> > +
>> > +           while (itr.hasNext()) {
>> > +               Object value = itr.next();
>> > +               if (value != null) {
>> > +                   value = getCollectionItemElement(fac, elementName,
>> > value,
>> > +                           valueType, typeTable, ns,
>> > elementFormDefault);
>> > +                   properties.add(new QName(ns.getNamespaceURI(),
>> > elementName, ns
>> > +                           .getPrefix()));
>> > +                   properties.add(value);
>> > +               }
>> > +           }
>> > +
>> > +           XMLStreamReader pullParser = new ADBXMLStreamReaderImpl(new
>> > QName(
>> > +                   ns.getNamespaceURI(), elementQName.getLocalPart(),
>> > +                   ns.getPrefix()), properties.toArray(), null,
>> > typeTable,
>> > +                   elementFormDefault);
>> > +
>> > +           StAXOMBuilder stAXOMBuilder = new StAXOMBuilder(
>> > +                   OMAbstractFactory.getOMFactory(), new
>> > StreamWrapper(pullParser));
>> > +           return stAXOMBuilder.getDocumentElement();
>> > +       }
>> > +
>> > +       /**
>> > +        * Gets the collection item element.
>> > +        *
>> > +        * @param fac the fac
>> > +        * @param elementName the element name
>> > +        * @param value the value
>> > +        * @param valueType the value type
>> > +        * @param typeTable the type table
>> > +        * @param ns the ns
>> > +        * @param elementFormDefault the element form default
>> > +        * @return the collection item element
>> > +        */
>> > +       private static Object getCollectionItemElement(OMFactory fac,
>> > +               String elementName, Object value, Type valueType,
>> > +               TypeTable typeTable, OMNamespace ns, boolean
>> > elementFormDefault) {
>> > +           if (SimpleTypeMapper.isMap(value.getClass())) {
>> > +               List<OMElement> childList = getMapElement(fac,
>> > valueType,
>> > +                       (Map) value, typeTable, elementFormDefault);
>> > +               OMElement omValue = fac.createOMElement(elementName,
>> > +                       ns.getNamespaceURI(), ns.getPrefix());
>> > +               for (OMElement child : childList) {
>> > +                   omValue.addChild(child);
>> > +               }
>> > +               return omValue;
>> > +
>> > +           } else if (SimpleTypeMapper.isCollection(value.getClass()))
>> > {
>> > +               return getCollectionElement(
>> > +                       fac,
>> > +                       valueType,
>> > +                       (Collection) value,
>> > +                       elementName,
>> > +                       Constants.INNTER_ARRARY_COMPLEX_TYPE_NAME,
>> > +                       new QName(ns.getNamespaceURI(), elementName,
>> > ns.getPrefix()),
>> > +                       typeTable, elementFormDefault);
>> > +           } else if (SimpleTypeMapper.isObjectType((Class) valueType))
>> > {
>> > +               OMElement omValue;
>> > +               omValue = fac.createOMElement(elementName, ns);
>> > +               if (SimpleTypeMapper.isSimpleType(value)) {
>> > +                   omValue.addChild(fac.createOMText(SimpleTypeMapper
>> > +                           .getStringValue(value)));
>> > +               } else {
>> > +                   QName name = new QName(ns.getNamespaceURI(),
>> > elementName,
>> > +                           ns.getPrefix());
>> > +                   XMLStreamReader xr = BeanUtil.getPullParser(value,
>> > name,
>> > +                           typeTable, true, false);
>> > +                   OMXMLParserWrapper stAXOMBuilder =
>> > OMXMLBuilderFactory
>> > +
>> > .createStAXOMBuilder(OMAbstractFactory.getOMFactory(),
>> > +                           new StreamWrapper(xr));
>> > +                   omValue = stAXOMBuilder.getDocumentElement();
>> > +
>> > +               }
>> > +               addInstanceTypeAttribute(fac, omValue, value,
>> > typeTable);
>> > +               return omValue;
>> > +           }
>> > +           return value;
>> > +       }
>> > +
>> > +       /**
>> > +        * Gets the collection instance object according to the
>> > genericType passed.
>> > +        *
>> > +        * @param genericType the generic type
>> > +        * @return the collection instance
>> > +        */
>> > +       private static Collection<Object> getCollectionInstance(Type
>> > genericType) {
>> > +           Class rowType;
>> > +           if (genericType instanceof ParameterizedType) {
>> > +               rowType = (Class) ((ParameterizedType)
>> > genericType).getRawType();
>> > +           } else {
>> > +               rowType = (Class) genericType;
>> > +           }
>> > +
>> > +           if (Collection.class.getName().equals(rowType.getName())
>> > +                   || List.class.getName().equals(rowType.getName())) {
>> > +               return new ArrayList<Object>();
>> > +
>> > +           } else if (Set.class.getName().equals(rowType.getName())) {
>> > +               return new HashSet<Object>();
>> > +
>> > +           } else if (Queue.class.getName().equals(rowType.getName()))
>> > {
>> > +               return new LinkedList<Object>();
>> > +
>> > +           } else if
>> > (BlockingDeque.class.getName().equals(rowType.getName())) {
>> > +               return new LinkedBlockingDeque<Object>();
>> > +
>> > +           } else if
>> > (BlockingQueue.class.getName().equals(rowType.getName())) {
>> > +               return new LinkedBlockingQueue<Object>();
>> > +
>> > +           } else if
>> > (NavigableSet.class.getName().equals(rowType.getName())
>> > +                   ||
>> > SortedSet.class.getName().equals(rowType.getName())) {
>> > +               return new TreeSet<Object>();
>> > +
>> > +           } else {
>> > +               try {
>> > +                   return (Collection<Object>) rowType.newInstance();
>> > +               } catch (Exception e) {
>> > +                   return new ArrayList<Object>();
>> > +               }
>> > +           }
>> > +       }
>> > +
>> > +
>> >  }
>> >
>> > Modified:
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/Constants.java
>> > URL:
>> > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/Constants.java?rev=1149674&r1=1149673&r2=1149674&view=diff
>> >
>> > ==============================================================================
>> > ---
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/Constants.java
>> > (original)
>> > +++
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/Constants.java
>> > Fri Jul 22 18:04:23 2011
>> > @@ -32,6 +32,9 @@ public interface Constants {
>> >     static String XSI_TYPE_ATTRIBUTE = "type";
>> >     static String DEFAULT_XSI_NAMESPACE_PREFIX = "xsi";
>> >     static String DEFAULT_XSD_NAMESPACE_PREFIX = "xs";
>> > +
>> > +    public static String INNTER_ARRARY_COMPLEX_TYPE_NAME = "array";
>> > +    public static String RETURN_WRAPPER = "return";
>> >
>> >     static Object OM_ATTRIBUTE_KEY = new OMAttribKey();
>> >     static Object OM_ELEMENT_KEY = new OMElementKey();
>> >
>> > Modified:
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/MultirefHelper.java
>> > URL:
>> > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/MultirefHelper.java?rev=1149674&r1=1149673&r2=1149674&view=diff
>> >
>> > ==============================================================================
>> > ---
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/MultirefHelper.java
>> > (original)
>> > +++
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/MultirefHelper.java
>> > Fri Jul 22 18:04:23 2011
>> > @@ -33,6 +33,8 @@ import org.apache.axis2.databinding.type
>> >  import org.apache.axis2.engine.ObjectSupplier;
>> >
>> >  import javax.xml.namespace.QName;
>> > +import java.lang.reflect.ParameterizedType;
>> > +import java.lang.reflect.Type;
>> >  import java.util.HashMap;
>> >  import java.util.Iterator;
>> >  import java.util.Map;
>> > @@ -106,7 +108,11 @@ public class MultirefHelper {
>> >         return new
>> > StAXOMBuilder(ele.getXMLStreamReader()).getDocumentElement();
>> >     }
>> >
>> > -    public Object processRef(Class javatype, String id, ObjectSupplier
>> > objectSupplier)
>> > +    public Object processRef(Class javatype, String id,
>> > +           ObjectSupplier objectSupplier) throws AxisFault {
>> > +       return processRef(javatype, null, id, objectSupplier);
>> > +    }
>> > +    public Object processRef(Class javatype, Type generictype, String
>> > id, ObjectSupplier objectSupplier)
>> >             throws AxisFault {
>> >         if (!filledTable) {
>> >             readallChildElements();
>> > @@ -128,10 +134,20 @@ public class MultirefHelper {
>> >                 Object valObj =
>> > SimpleTypeMapper.getSimpleTypeObject(javatype, val);
>> >                 objectmap.put(id, valObj);
>> >                 return valObj;
>> > -            } else if (SimpleTypeMapper.isCollection(javatype)) {
>> > -                Object valobj = SimpleTypeMapper.getArrayList(val);
>> > -                objectmap.put(id, valobj);
>> > -                return valobj;
>> > +            } else if (generictype != null
>> > +                   && SimpleTypeMapper.isCollection(javatype)) {
>> > +               return
>> > BeanUtil.processGenericCollection(val.getFirstElement(),
>> > +                       generictype, this, objectSupplier);
>> > +            } else if (generictype != null
>> > +                   && SimpleTypeMapper.isMap(javatype)) {
>> > +               Type[] parameterArgTypes = {Object.class, Object.class};
>> > +               if (generictype instanceof ParameterizedType) {
>> > +                   ParameterizedType aType = (ParameterizedType)
>> > generictype;
>> > +                   parameterArgTypes = aType.getActualTypeArguments();
>> > +               }
>> > +               return
>> > BeanUtil.processGenericsMapElement(parameterArgTypes,
>> > +                       val.getFirstElement(), this, val.getChildren(),
>> > +                       objectSupplier, generictype);
>> >             } else {
>> >                 Object obj = BeanUtil.deserialize(javatype, val, this,
>> > objectSupplier);
>> >                 objectmap.put(id, obj);
>> >
>> > Modified:
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java
>> > URL:
>> > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java?rev=1149674&r1=1149673&r2=1149674&view=diff
>> >
>> > ==============================================================================
>> > ---
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java
>> > (original)
>> > +++
>> > axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java
>> > Fri Jul 22 18:04:23 2011
>> > @@ -32,6 +32,7 @@ import org.apache.axis2.AxisFault;
>> >  import org.apache.axis2.context.MessageContext;
>> >  import org.apache.axis2.databinding.typemapping.SimpleTypeMapper;
>> >  import org.apache.axis2.databinding.utils.BeanUtil;
>> > +import org.apache.axis2.databinding.utils.Constants;
>> >  import org.apache.axis2.databinding.utils.reader.NullXMLStreamReader;
>> >  import org.apache.axis2.description.AxisMessage;
>> >  import org.apache.axis2.description.AxisService;
>> > @@ -45,6 +46,8 @@ import javax.xml.stream.XMLStreamReader;
>> >  import java.lang.reflect.Array;
>> >  import java.lang.reflect.InvocationTargetException;
>> >  import java.lang.reflect.Method;
>> > +import java.lang.reflect.ParameterizedType;
>> > +import java.lang.reflect.Type;
>> >  import java.util.Collection;
>> >  import java.util.Iterator;
>> >  import java.util.List;
>> > @@ -52,8 +55,7 @@ import java.util.Map;
>> >
>> >  public class RPCUtil {
>> >
>> > -    private static String RETURN_WRAPPER = "return";
>> > -
>> > +
>> >     public static void processResponse(SOAPFactory fac, Object
>> > resObject,
>> >                                        OMElement bodyContent,
>> >                                        OMNamespace ns,
>> > @@ -69,10 +71,10 @@ public class RPCUtil {
>> >                         method.getName() + "Response", ns);
>> >                 OMElement resWrapper;
>> >                 if (qualified) {
>> > -                    resWrapper = fac.createOMElement(RETURN_WRAPPER,
>> > ns.getNamespaceURI(),
>> > +                    resWrapper =
>> > fac.createOMElement(Constants.RETURN_WRAPPER, ns.getNamespaceURI(),
>> >                             ns.getPrefix());
>> >                 } else {
>> > -                    resWrapper = fac.createOMElement(RETURN_WRAPPER,
>> > null);
>> > +                    resWrapper =
>> > fac.createOMElement(Constants.RETURN_WRAPPER, null);
>> >                 }
>> >                 resWrapper.addChild(result);
>> >                 bodyContent.addChild(resWrapper);
>> > @@ -81,9 +83,9 @@ public class RPCUtil {
>> >                                bodyContent =
>> > fac.createOMElement(method.getName() + "Response", ns);
>> >                                OMElement child;
>> >                                if (qualified) {
>> > -                                       child =
>> > fac.createOMElement(RETURN_WRAPPER, ns);
>> > +                                       child =
>> > fac.createOMElement(Constants.RETURN_WRAPPER, ns);
>> >                                } else {
>> > -                                       child =
>> > fac.createOMElement(RETURN_WRAPPER, null);
>> > +                                       child =
>> > fac.createOMElement(Constants.RETURN_WRAPPER, null);
>> >                                }
>> >                                child.addChild(doc);
>> >                                bodyContent.addChild(child);
>> > @@ -92,9 +94,9 @@ public class RPCUtil {
>> >                         method.getName() + "Response", ns);
>> >                 OMElement child;
>> >                 if (qualified) {
>> > -                    child = fac.createOMElement(RETURN_WRAPPER, ns);
>> > +                    child =
>> > fac.createOMElement(Constants.RETURN_WRAPPER, ns);
>> >                 } else {
>> > -                    child = fac.createOMElement(RETURN_WRAPPER, null);
>> > +                    child =
>> > fac.createOMElement(Constants.RETURN_WRAPPER, null);
>> >                 }
>> >                 child.addChild(fac.createOMText(child,
>> > SimpleTypeMapper.getStringValue(resObject)));
>> >                 addInstanceTypeInfo(fac, child, method, resObject,
>> > typeTable);
>> > @@ -105,9 +107,9 @@ public class RPCUtil {
>> >                 // Java Beans
>> >                 QName returnWrapper;
>> >                 if (qualified) {
>> > -                    returnWrapper = new QName(ns.getNamespaceURI(),
>> > RETURN_WRAPPER, ns.getPrefix());
>> > +                    returnWrapper = new QName(ns.getNamespaceURI(),
>> > Constants.RETURN_WRAPPER, ns.getPrefix());
>> >                 } else {
>> > -                    returnWrapper = new QName(RETURN_WRAPPER);
>> > +                    returnWrapper = new
>> > QName(Constants.RETURN_WRAPPER);
>> >                 }
>> >                 XMLStreamReader xr = BeanUtil.getPullParser(resObject,
>> >                         returnWrapper, typeTable, qualified, false);
>> > @@ -250,13 +252,13 @@ public class RPCUtil {
>> >         if (qualified) {
>> >             return BeanUtil.getOMElement(resname, objs,
>> >                     new QName(resname.getNamespaceURI(),
>> > -                            RETURN_WRAPPER,
>> > +                           Constants.RETURN_WRAPPER,
>> >                             resname.getPrefix()),
>> >                     qualified,
>> >                     typeTable);
>> >         } else {
>> >             return BeanUtil.getOMElement(resname, objs,
>> > -                    new QName(RETURN_WRAPPER), qualified,
>> > +                    new QName(Constants.RETURN_WRAPPER), qualified,
>> >                     typeTable);
>> >         }
>> >     }
>> > @@ -308,24 +310,17 @@ public class RPCUtil {
>> >                     envelope.getBody().addChild(bodyChild);
>> >                 } else {
>> >                     if
>> > (SimpleTypeMapper.isCollection(resObject.getClass())) {
>> > -                        Collection collection = (Collection) resObject;
>> > -                        int size = collection.size();
>> > -                        Object values[] = new Object[size];
>> > -                        int count = 0;
>> > -                        for (Object aCollection : collection) {
>> > -                            values[count] = aCollection;
>> > -                            count++;
>> > -
>> > -                        }
>> > -                        QName resName = new
>> > QName(elementQName.getNamespaceURI(),
>> > -                                partName,
>> > -                                elementQName.getPrefix());
>> > -                        OMElement bodyChild =
>> > RPCUtil.getResponseElement(resName,
>> > -                                values,
>> > -                                service.isElementFormDefault(),
>> > -                                service.getTypeTable());
>> > -                        envelope.getBody().addChild(bodyChild);
>> > -
>> > +                       QName resName = new QName(
>> > +
>> > elementQName.getNamespaceURI(),
>> > +
>> > method.getName() + "Response",
>> > +
>> > elementQName.getPrefix());
>> > +                                               OMElement bodyChild =
>> > BeanUtil.getCollectionElement(
>> > +                                                               fac,
>> > method.getGenericReturnType(),
>> > +
>> > (Collection) resObject, Constants.RETURN_WRAPPER,null,
>> > +                                                               resName,
>> > service.getTypeTable(),
>> > +
>> > service.isElementFormDefault());
>> > +
>> > envelope.getBody().addChild(bodyChild);
>> > +
>> >                                        } else if
>> > (SimpleTypeMapper.isMap(resObject.getClass())) {
>> >                                                OMElement resElemt =
>> > fac.createOMElement(
>> >                                                                partName,
>> > ns);
>> > @@ -428,10 +423,10 @@ public class RPCUtil {
>> >             QName resName;
>> >             if (service.isElementFormDefault()) {
>> >                 resName = new QName(service.getSchemaTargetNamespace(),
>> > -                        RETURN_WRAPPER,
>> > +                       Constants.RETURN_WRAPPER,
>> >                         service.getSchemaTargetNamespacePrefix());
>> >             } else {
>> > -                resName = new QName(RETURN_WRAPPER);
>> > +                resName = new QName(Constants.RETURN_WRAPPER);
>> >             }
>> >             XMLStreamReader xr = new NullXMLStreamReader(resName);
>> >             StreamWrapper parser = new StreamWrapper(xr);
>> > @@ -477,32 +472,25 @@ public class RPCUtil {
>> >                             service.getTypeTable());
>> >                     envelope.getBody().addChild(bodyChild);
>> >                 } else {
>> > -                    if
>> > (SimpleTypeMapper.isCollection(resObject.getClass())) {
>> > -                        Collection collection = (Collection) resObject;
>> > -                        int size = collection.size();
>> > -                        Object values[] = new Object[size];
>> > -                        int count = 0;
>> > -                        for (Object aCollection : collection) {
>> > -                            values[count] = aCollection;
>> > -                            count++;
>> > -
>> > -                        }
>> > -                        QName resName = new
>> > QName(elementQName.getNamespaceURI(),
>> > -                                method.getName() + "Response",
>> > -                                elementQName.getPrefix());
>> > -                        OMElement bodyChild =
>> > RPCUtil.getResponseElement(resName,
>> > -                                values,
>> > -                                service.isElementFormDefault(),
>> > -                                service.getTypeTable());
>> > -                        envelope.getBody().addChild(bodyChild);
>> > +                    if
>> > (SimpleTypeMapper.isCollection(resObject.getClass())) {
>> > +                                               QName resName = new
>> > QName(
>> > +
>> > elementQName.getNamespaceURI(),
>> > +
>> > method.getName() + "Response",
>> > +
>> > elementQName.getPrefix());
>> > +                                               OMElement bodyChild =
>> > BeanUtil.getCollectionElement(
>> > +                                                               fac,
>> > method.getGenericReturnType(),
>> > +
>> > (Collection) resObject, Constants.RETURN_WRAPPER,null,
>> > +                                                               resName,
>> > service.getTypeTable(),
>> > +
>> > service.isElementFormDefault());
>> > +
>> > envelope.getBody().addChild(bodyChild);
>> >                     } else if
>> > (SimpleTypeMapper.isMap(resObject.getClass())){
>> >                         OMElement resElemt =
>> > fac.createOMElement(method.getName() + "Response", ns);
>> >                         List<OMElement> omList =
>> > BeanUtil.getMapElement(fac,method.getGenericReturnType(), (Map)
>> > resObject,service.getTypeTable(),service.isElementFormDefault());
>> >                          OMElement returnElement;
>> >                          if (service.isElementFormDefault()) {
>> > -                             returnElement =
>> > fac.createOMElement(RETURN_WRAPPER, ns);
>> > +                             returnElement =
>> > fac.createOMElement(Constants.RETURN_WRAPPER, ns);
>> >                          } else {
>> > -                             returnElement =
>> > fac.createOMElement(RETURN_WRAPPER, null);
>> > +                             returnElement =
>> > fac.createOMElement(Constants.RETURN_WRAPPER, null);
>> >                          }
>> >                          Iterator<OMElement> omItr = omList.iterator();
>> >                          while(omItr.hasNext()){
>> > @@ -516,9 +504,9 @@ public class RPCUtil {
>> >                         OMText text = fac.createOMText(resObject, true);
>> >                         OMElement returnElement;
>> >                         if (service.isElementFormDefault()) {
>> > -                            returnElement =
>> > fac.createOMElement(RETURN_WRAPPER, ns);
>> > +                            returnElement =
>> > fac.createOMElement(Constants.RETURN_WRAPPER, ns);
>> >                         } else {
>> > -                            returnElement =
>> > fac.createOMElement(RETURN_WRAPPER, null);
>> > +                            returnElement =
>> > fac.createOMElement(Constants.RETURN_WRAPPER, null);
>> >                         }
>> >                         returnElement.addChild(text);
>> >                         resElemt.addChild(returnElement);
>> >
>> > Modified:
>> > axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java
>> > URL:
>> > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java?rev=1149674&r1=1149673&r2=1149674&view=diff
>> >
>> > ==============================================================================
>> > ---
>> > axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java
>> > (original)
>> > +++
>> > axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java
>> > Fri Jul 22 18:04:23 2011
>> > @@ -114,7 +114,7 @@ public class BeanUtilTest extends TestCa
>> >         OMElement child = omFactory.createOMElement(new QName("child"),
>> > omElement);
>> >         child.setText("World");
>> >
>> > -        Object result = BeanUtil.processObject(omElement, List.class,
>> > new MultirefHelper(omElement), false, objectSupplier, null);
>> > +        Object result =
>> > BeanUtil.processObject(omElement.getFirstElement(), List.class, new
>> > MultirefHelper(omElement), false, objectSupplier, List.class);
>> >         assertTrue(result instanceof List);
>> >         assertEquals(1, ((List) result).size());
>> >     }
>> >
>> > Modified:
>> > axis/axis2/java/core/trunk/modules/integration/test-resources/generics/generics.wsdl
>> > URL:
>> > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/integration/test-resources/generics/generics.wsdl?rev=1149674&r1=1149673&r2=1149674&view=diff
>> >
>> > ==============================================================================
>> > ---
>> > axis/axis2/java/core/trunk/modules/integration/test-resources/generics/generics.wsdl
>> > (original)
>> > +++
>> > axis/axis2/java/core/trunk/modules/integration/test-resources/generics/generics.wsdl
>> > Fri Jul 22 18:04:23 2011
>> > @@ -18,17 +18,10 @@
>> >                 </xs:complexType>
>> >             </xs:element>
>> >             <xs:element name="processStringArray">
>> > -                <xs:complexType>
>> > -                    <xs:sequence>
>> > -                        <xs:element maxOccurs="unbounded" minOccurs="0"
>> > name="values" nillable="true" type="ns:String"/>
>> > -                    </xs:sequence>
>> > +                 <xs:complexType>
>> > +                    <xs:sequence/>
>> >                 </xs:complexType>
>> > -            </xs:element>
>> > -            <xs:complexType name="String">
>> > -                <xs:sequence>
>> > -                    <xs:element maxOccurs="unbounded" minOccurs="0"
>> > name="array" nillable="true" type="xs:string"/>
>> > -                </xs:sequence>
>> > -            </xs:complexType>
>> > +            </xs:element>
>> >             <xs:element name="processPersonList">
>> >                 <xs:complexType>
>> >                     <xs:sequence>
>> >
>> > Modified:
>> > axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/generics/GenericServiceTest.java
>> > URL:
>> > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/generics/GenericServiceTest.java?rev=1149674&r1=1149673&r2=1149674&view=diff
>> >
>> > ==============================================================================
>> > ---
>> > axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/generics/GenericServiceTest.java
>> > (original)
>> > +++
>> > axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/generics/GenericServiceTest.java
>> > Fri Jul 22 18:04:23 2011
>> > @@ -40,12 +40,13 @@ public class GenericServiceTest extends
>> >
>> >     public void testProcessStringList() throws AxisFault {
>> >         RPCServiceClient sender = getRPCClient("GenericService",
>> > "processStringList");
>> > -        ArrayList<StringArray> args = new ArrayList<StringArray>();
>> > -        args.add(new StringArray());
>> > -
>> > -        Object[] value = sender.invokeBlocking(new
>> > QName("http://generics.axis2.apache.org", "processStringList", "req"),
>> > args.toArray(),
>> > -                new Class[]{String.class});
>> > -        assertEquals(value[0], "Test1");
>> > +        ArrayList<String> args = new ArrayList<String>();
>> > +       args.add("Test1");
>> > +       Object[] value = sender.invokeBlocking(
>> > +               new QName("http://generics.axis2.apache.org",
>> > +                       "processStringList", "req"), args.toArray(),
>> > +                       new Class[] { String.class });
>> > +       assertEquals(value[0], "Test1");
>> >     }
>> >
>> >     public void testGetStringList() throws AxisFault {
>> > @@ -69,11 +70,14 @@ public class GenericServiceTest extends
>> >
>> >     public void testProcessPersonList() throws AxisFault {
>> >         RPCServiceClient sender = getRPCClient("GenericService",
>> > "processPersonList");
>> > -        ArrayList<PersonArray> args = new ArrayList<PersonArray>();
>> > -        args.add(new PersonArray());
>> > -
>> > -        Object[] value = sender.invokeBlocking(new
>> > QName("http://generics.axis2.apache.org", "processPersonList", "req"),
>> > args.toArray(),
>> > -                new Class[]{Person.class});
>> > +        ArrayList<Person> args = new ArrayList<Person>();
>> > +        Person p = new Person();
>> > +        p.setAge(10);
>> > +        args.add(p);
>> > +        Object[] value = sender.invokeBlocking(
>> > +               new QName("http://generics.axis2.apache.org",
>> > +                       "processPersonList", "req"), args.toArray(),
>> > +                       new Class[] { Person.class });
>> >         Person person = (Person) value[0];
>> >         assertNotNull(person);
>> >         assertEquals(person.getAge(), 10);
>> >
>> > Modified:
>> > axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/Company.java
>> > URL:
>> > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/Company.java?rev=1149674&r1=1149673&r2=1149674&view=diff
>> >
>> > ==============================================================================
>> > ---
>> > axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/Company.java
>> > (original)
>> > +++
>> > axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/Company.java
>> > Fri Jul 22 18:04:23 2011
>> > @@ -23,14 +23,14 @@ import java.util.ArrayList;
>> >
>> >  public class Company {
>> >
>> > -    private ArrayList persons;
>> > +    private ArrayList<Person> persons;
>> >     private String name;
>> >
>> > -    public ArrayList getPersons() {
>> > +    public ArrayList<Person> getPersons() {
>> >         return persons;
>> >     }
>> >
>> > -    public void setPersons(ArrayList persons) {
>> > +    public void setPersons(ArrayList<Person> persons) {
>> >         this.persons = persons;
>> >     }
>> >
>> >
>> > Modified:
>> > axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/RPCCallTest.java
>> > URL:
>> > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/RPCCallTest.java?rev=1149674&r1=1149673&r2=1149674&view=diff
>> >
>> > ==============================================================================
>> > ---
>> > axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/RPCCallTest.java
>> > (original)
>> > +++
>> > axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/RPCCallTest.java
>> > Fri Jul 22 18:04:23 2011
>> > @@ -203,7 +203,7 @@ public class RPCCallTest extends RPCLoca
>> >         Company com = new Company();
>> >         com.setName("MyCompany");
>> >
>> > -        ArrayList ps = new ArrayList();
>> > +        ArrayList<Person> ps = new ArrayList<Person>();
>> >
>> >         Person p1 = new Person();
>> >         p1.setAge(10);
>> > @@ -269,7 +269,7 @@ public class RPCCallTest extends RPCLoca
>> >         Company com = new Company();
>> >         com.setName("MyCompany");
>> >
>> > -        ArrayList ps = new ArrayList();
>> > +        ArrayList<Person> ps = new ArrayList<Person>();
>> >
>> >         Person p1 = new Person();
>> >         p1.setAge(10);
>> > @@ -467,13 +467,12 @@ public class RPCCallTest extends RPCLoca
>> >     }
>> >
>> >     private OMElement getPayload() throws Exception {
>> > -        String str = "<req:handleArrayList
>> > xmlns:req=\"http://rpc.axis2.apache.org\">\n" +
>> > -                "  <arg0>\n" +
>> > -                "    <item0>abc</item0>\n" +
>> > -                "    <item0>def</item0>\n" +
>> > -                "    <item0>ghi</item0>\n" +
>> > -                "    <item0>klm</item0>\n" +
>> > -                "  </arg0><arg1>10</arg1>" +
>> > +        String str = "<req:handleArrayList
>> > xmlns:req=\"http://rpc.axis2.apache.org\">\n" +
>> > +                "    <item0
>> > xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
>> >  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
>> > xsi:type=\"xsd:string\">abc</item0>\n" +
>> > +                "    <item0
>> > xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
>> >  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
>> > xsi:type=\"xsd:string\">def</item0>\n" +
>> > +                "    <item0
>> > xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
>> >  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
>> > xsi:type=\"xsd:string\">ghi</item0>\n" +
>> > +                "    <item0
>> > xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
>> >  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
>> > xsi:type=\"xsd:string\">klm</item0>\n" +
>> > +                " <arg1
>> > xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
>> >  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
>> > xsi:type=\"xsd:int\">10</arg1>" +
>> >                 "</req:handleArrayList>";
>> >         StAXOMBuilder staxOMBuilder;
>> >         XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(
>> >
>> > Modified:
>> > axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/RPCServiceClass.java
>> > URL:
>> > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/RPCServiceClass.java?rev=1149674&r1=1149673&r2=1149674&view=diff
>> >
>> > ==============================================================================
>> > ---
>> > axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/RPCServiceClass.java
>> > (original)
>> > +++
>> > axis/axis2/java/core/trunk/modules/integration/test/org/apache/axis2/rpc/RPCServiceClass.java
>> > Fri Jul 22 18:04:23 2011
>> > @@ -139,14 +139,11 @@ public class RPCServiceClass {
>> >         return bean2 != null && bean != null;
>> >     }
>> >
>> > -    public String handleArrayList(ArrayList list, int b) {
>> > -        String str = "";
>> > +    public String handleArrayList(ArrayList<String> list, int b) {
>> > +        String str = "";
>> >         for (int i = 0; i < list.size(); i++) {
>> > -            Object obj = list.get(i);
>> > -            if (obj instanceof OMElement) {
>> > -                OMElement omElement = (OMElement)obj;
>> > -                str = str + omElement.getText();
>> > -            }
>> > +            String obj = list.get(i);
>> > +            str = str + obj;
>> >         }
>> >         return str + b;
>> >     }
>> > @@ -170,12 +167,10 @@ public class RPCServiceClass {
>> >
>> >
>> >     public Company echoCompany(Company com) throws AxisFault {
>> > -        ArrayList pss = com.getPersons();
>> > -        ArrayList tems = new ArrayList();
>> > -        for (int i = 0; i < pss.size(); i++) {
>> > -            OMElement omElement = (OMElement)pss.get(i);
>> > -            Person p = (Person)BeanUtil
>> > -                    .deserialize(Person.class, omElement, new
>> > DefaultObjectSupplier(), null);
>> > +        ArrayList<Person> pss = com.getPersons();
>> > +        ArrayList<Person> tems = new ArrayList<Person>();
>> > +        for (int i = 0; i < pss.size(); i++) {
>> > +            Person p = pss.get(i);
>> >             tems.add(p);
>> >         }
>> >         com.setPersons(tems);
>> >
>> > Modified:
>> > axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java
>> > URL:
>> > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java?rev=1149674&r1=1149673&r2=1149674&view=diff
>> >
>> > ==============================================================================
>> > ---
>> > axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java
>> > (original)
>> > +++
>> > axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java
>> > Fri Jul 22 18:04:23 2011
>> > @@ -400,9 +400,12 @@ public class DefaultSchemaGenerator impl
>> >                     break;
>> >
>> >                 } else if(methodParameter != null &&
>> > Map.class.isAssignableFrom(methodParameter)) {
>> > -
>> > generateWrappedSchemaTypeForMap(sequence,genericParameterTypes[j],
>> > parameterName);
>> > -                }
>> > -                else {
>> > +                       generateWrappedSchemaTypeForMap(sequence,
>> > genericParameterTypes[j], parameterName);
>> > +
>> > +                } else if(methodParameter != null &&
>> > Collection.class.isAssignableFrom(methodParameter)){
>> > +                       generateWrappedSchemaTypeForCollection(sequence,
>> > genericParameterTypes[j], parameterName);
>> > +
>> > +                } else {
>> >                     Type genericParameterType =
>> > genericParameterTypes[j];
>> >                     Type genericType = null;
>> >                     if(genericParameterType instanceof
>> > ParameterizedType){
>> > @@ -440,6 +443,12 @@ public class DefaultSchemaGenerator impl
>> >                                        } else {
>> >
>> >  generateWrappedSchemaTypeForMap(sequence, returnType, returnName);
>> >                                        }
>> > +                } else if
>> > (Collection.class.isAssignableFrom(returnType)){
>> > +                                       if (genericParameterType
>> > instanceof ParameterizedType) {
>> > +
>> > generateWrappedSchemaTypeForCollection(sequence, genericParameterType,
>> > returnName);
>> > +                                       } else {
>> > +
>> > generateWrappedSchemaTypeForCollection(sequence, genericParameterType,
>> > returnName);
>> > +                                       }
>> >                 } else if(genericParameterType instanceof
>> > ParameterizedType){
>> >                     ParameterizedType aType = (ParameterizedType)
>> > genericParameterType;
>> >                     Type[] parameterArgTypes =
>> > aType.getActualTypeArguments();
>> > @@ -665,6 +674,14 @@ public class DefaultSchemaGenerator impl
>> >                             Type[] fieldArgTypes =
>> > aType.getActualTypeArguments();
>> >
>> > if(Map.class.isAssignableFrom((Class)((ParameterizedType)aType).getRawType())){
>> >                                generateWrappedSchemaTypeForMap(sequence,
>> > aType, propertyName);
>> > +
>> > +                           }
>> > +                           if (Collection.class
>> > +                                   .isAssignableFrom((Class)
>> > ((ParameterizedType) aType)
>> > +                                           .getRawType())) {
>> > +
>> > +                               generateWrappedSchemaTypeForCollection(
>> > +                                       sequence, aType, propertyName);
>> >                             } else {
>> >                                try {
>> >
>> > generateSchemaforGenericFields(xmlSchema,
>> > @@ -684,7 +701,15 @@ public class DefaultSchemaGenerator impl
>> >                         } else {
>> >                                if(genericFieldType != null &&
>> > Map.class.isAssignableFrom((Class)genericFieldType)){
>> >
>> >  generateWrappedSchemaTypeForMap(sequence, genericFieldType, propertyName);
>> > -                            } else {
>> > +
>> > +                           }
>> > +                           if (genericFieldType != null
>> > +                                   && Collection.class
>> > +                                           .isAssignableFrom((Class)
>> > genericFieldType)) {
>> > +                               generateWrappedSchemaTypeForCollection(
>> > +                                       sequence, genericFieldType,
>> > +                                       propertyName);
>> > +                           } else {
>> >
>> >  generateSchemaforFieldsandProperties(xmlSchema,
>> >                                         sequence,
>> >                                         property.getPropertyType(),
>> > @@ -1703,7 +1728,7 @@ public class DefaultSchemaGenerator impl
>> >         */
>> >        private void generateWrappedSchemaTypeForMap(XmlSchemaSequence
>> > sequence,
>> >                        Type genericParameterType, String parameterName)
>> > throws Exception {
>> > -               generateSchemaTypeForMap(sequence, genericParameterType,
>> > parameterName);
>> > +               generateSchemaTypeForMap(sequence, genericParameterType,
>> > parameterName, false);
>> >        }
>> >
>> >        /**
>> > @@ -1716,7 +1741,7 @@ public class DefaultSchemaGenerator impl
>> >         * @throws Exception the exception
>> >         */
>> >        protected QName generateSchemaTypeForMap(XmlSchemaSequence
>> > sequence,
>> > -                       Type genericParameterType, String parameterName)
>> > throws Exception {
>> > +                       Type genericParameterType, String parameterName,
>> > boolean isArrayType) throws Exception {
>> >                /*
>> >                 * In Doc/Lit Wrapped - sequence should not be null.
>> >                 * In Doc/lit Bare    - sequence should be null.
>> > @@ -1781,6 +1806,11 @@ public class DefaultSchemaGenerator impl
>> >
>> >                        XmlSchemaElement parameterElement = new
>> > XmlSchemaElement();
>> >                        parameterElement.setName(parameterName);
>> > +                       if(isArrayType){
>> > +
>> > parameterElement.setMaxOccurs(Long.MAX_VALUE);
>> > +                               parameterElement.setMinOccurs(0);
>> > +                               parameterElement.setNillable(true);
>> > +                       }
>> >                        sequence.getItems().add(parameterElement);
>> >
>> >  parameterElement.setSchemaTypeName(parameterTypeName);
>> >                        return parameterTypeName;
>> > @@ -1796,7 +1826,7 @@ public class DefaultSchemaGenerator impl
>> >         * @param elementName the element name
>> >         * @throws Exception the exception
>> >         */
>> > -       private void generateSchemaTypeForMapParameter(
>> > +       protected void generateSchemaTypeForMapParameter(
>> >                        XmlSchemaSequence entrySequence, Type
>> > parameterType,
>> >

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org