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 aj...@apache.org on 2005/10/26 07:49:33 UTC

svn commit: r328568 - in /webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2: databinding/schema/ databinding/schema/template/ wsdl/template/java/

Author: ajith
Date: Tue Oct 25 22:49:21 2005
New Revision: 328568

URL: http://svn.apache.org/viewcvs?rev=328568&view=rev
Log:
1. Fixed the sequence handling in the schema compiler
2. Updated the ADBSupporterTemplate.xsl so that the generated code using the ADB works! We still has a bit of a problem 

Modified:
    webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java
    webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java
    webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java
    webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl
    webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/template/java/ADBSupporterTemplate.xsl

Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java?rev=328568&r1=328567&r2=328568&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java Tue Oct 25 22:49:21 2005
@@ -1,9 +1,8 @@
 package org.apache.axis2.databinding.schema;
 
 import javax.xml.namespace.QName;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Iterator;
+import java.util.*;
+import java.lang.reflect.Array;
 /*
  * Copyright 2004,2005 The Apache Software Foundation.
  *
@@ -37,6 +36,7 @@
     private Map specialTypeFlagMap = new HashMap();
     private Map qNameMaxOccursCountMap = new HashMap();
     private Map qNameMinOccursCountMap = new HashMap();
+    private Map qNameOrderMap = new HashMap();
 
     public String getExtensionClassName() {
         return extensionClassName;
@@ -119,6 +119,15 @@
     }
 
     /**
+        *
+        * @param qName
+        * @param index
+        */
+       public void registerQNameIndex(QName qName, int index){
+           this.qNameOrderMap.put(new Integer(index),qName);
+       }
+
+    /**
      *
      * @param qName
      * @return
@@ -155,5 +164,30 @@
         return elementToJavaClassMap.keySet().iterator();
     }
 
+    /**
+        *
+        * @return
+        */
+       public QName[] getQNameArray(){
+           Set keySet =elementToJavaClassMap.keySet();
+           return (QName[])keySet.toArray(new QName[keySet.size()]);
+       }
+
+
+    public QName[] getOrderedQNameArray(){
+       //get the keys of the order map
+        Set set = qNameOrderMap.keySet();
+        int count = set.size();
+        Integer[] keys =(Integer[]) set.toArray(new Integer[count]);
+        Arrays.sort(keys);
+
+        //Now refill the Ordered QName Array
+        QName[] returnQNames = new QName[count];
+        for (int i = 0; i < keys.length; i++) {
+            returnQNames[i] = (QName)qNameOrderMap.get(keys[i]);
+
+        }
+       return returnQNames;
+    }
 
 }

Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java?rev=328568&r1=328567&r2=328568&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java Tue Oct 25 22:49:21 2005
@@ -84,7 +84,8 @@
 
     private String process(QName qName, BeanWriterMetaInfoHolder metainf, Map typeMap, boolean isElement) throws Exception {
         String packageName = URLProcessor.getNameSpaceFromURL(qName.getNamespaceURI());
-        String className = getNonConflictingName(this.namesList,qName.getLocalPart());
+        String originalName = qName.getLocalPart();
+        String className = getNonConflictingName(this.namesList,originalName);
 
         ArrayList propertyNames = new ArrayList();
 
@@ -98,6 +99,7 @@
         //make the XML
         Element rootElt = XSLTUtils.addChildElement(model,"bean",model);
         XSLTUtils.addAttribute(model,"name",className,rootElt);
+        XSLTUtils.addAttribute(model,"originalName",originalName,rootElt);
         XSLTUtils.addAttribute(model,"package",packageName,rootElt);
         XSLTUtils.addAttribute(model,"nsuri",qName.getNamespaceURI(),rootElt);
         XSLTUtils.addAttribute(model,"nsprefix",qName.getPrefix(),rootElt);
@@ -109,19 +111,28 @@
             XSLTUtils.addAttribute(model,"extension",metainf.getExtensionClassName(),rootElt);
         }
         // go in the loop and add the part elements
-        Iterator qNameIterator = metainf.getElementQNameIterator();
+        QName[] qNames = null;
+        if (metainf.isOrdered()){
+            qNames = metainf.getOrderedQNameArray();
+        }else{
+            qNames = metainf.getQNameArray();
+        }
 
         QName name;
-        while (qNameIterator.hasNext()) {
+        for (int i = 0; i < qNames.length; i++) {
             Element property = XSLTUtils.addChildElement(model,"property",rootElt);
-            name = (QName)qNameIterator.next();
+            name = qNames[i];
             String xmlName = name.getLocalPart();
+            System.out.println(xmlName);
+            XSLTUtils.addAttribute(model,"name",xmlName,property);
+
             String javaName = "";
             if (JavaUtils.isJavaKeyword(xmlName)){
                 javaName = JavaUtils.makeNonJavaKeyword(xmlName);
             }else{
                 javaName = JavaUtils.xmlNameToJava(xmlName,false);
             }
+
             javaName = getNonConflictingName(propertyNames,javaName);
             XSLTUtils.addAttribute(model,"name",xmlName,property);
             XSLTUtils.addAttribute(model,"javaname",javaName,property);
@@ -160,7 +171,7 @@
                         javaClassNameForElement.substring(0,javaClassNameForElement.indexOf("[")),
                         property);
 
-                
+
                 long minOccurs = metainf.getMinOccurs(name);
 
                 if (minOccurs >0){

Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java?rev=328568&r1=328567&r2=328568&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java Tue Oct 25 22:49:21 2005
@@ -389,15 +389,23 @@
                          boolean order) throws SchemaCompilationException {
         int count = items.getCount();
         Map processedElements = new HashMap();
+        Map elementOrderMap = new HashMap();
 
         for (int i = 0; i < count; i++) {
             XmlSchemaObject item = items.getItem(i);
+
             if (item instanceof XmlSchemaElement){
                 //recursively process the element
                 XmlSchemaElement xsElt = (XmlSchemaElement) item;
+
                 boolean isArray = isArray(xsElt);
                 processElement(xsElt,false,isArray); //we know for sure this is not an outer type
                 processedElements.put(xsElt, (isArray) ? Boolean.TRUE : Boolean.FALSE);
+                if (order){
+                    //we need to keep the order of the elements. So push the elements to another
+                    //hashmap with the order number
+                    elementOrderMap.put(xsElt,new Integer(i));
+                }
             }else if (item instanceof XmlSchemaComplexContent){
                 // process the extension
                 XmlSchemaContent content = ((XmlSchemaComplexContent)item).getContent();
@@ -419,18 +427,28 @@
         Iterator processedElementsIterator= processedElements.keySet().iterator();
         while(processedElementsIterator.hasNext()){
             XmlSchemaElement elt = (XmlSchemaElement)processedElementsIterator.next();
-            String clazzName = (String)processedElementMap.get(elt.getQName());
-            metainfHolder.registerMapping(elt.getQName(),
+            QName qName = elt.getQName();
+            String clazzName = (String)processedElementMap.get(qName);
+            metainfHolder.registerMapping(qName,
                     elt.getSchemaTypeName()
                     ,clazzName,
                     ((Boolean)processedElements.get(elt)).booleanValue()?
                             SchemaConstants.ANY_ARRAY_TYPE:
                             SchemaConstants.ELEMENT_TYPE);
+
             //register the occurence counts
-            metainfHolder.addMaxOccurs(elt.getQName(),elt.getMaxOccurs());
-            metainfHolder.addMinOccurs(elt.getQName(),elt.getMinOccurs());
+            metainfHolder.addMaxOccurs(qName,elt.getMaxOccurs());
+            metainfHolder.addMinOccurs(qName,elt.getMinOccurs());
+            //we need the order to be preserved. So record the order also
+            if (order){
+              //record the order in the metainf holder
+                Integer integer = (Integer) elementOrderMap.get(elt);
+                metainfHolder.registerQNameIndex(qName,
+                        integer.intValue());
+            }
 
         }
+
         //set the ordered flag in the metainf holder
         metainfHolder.setOrdered(order);
     }

Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl?rev=328568&r1=328567&r2=328568&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl Tue Oct 25 22:49:21 2005
@@ -12,7 +12,7 @@
         implements org.apache.axis2.databinding.ADBBean{
         <xsl:choose>
             <xsl:when test="@type">/* This type was generated from the piece of schema that had
-                name = <xsl:value-of select="$name"/>
+                name = <xsl:value-of select="@originalName"/>
                 Namespace URI = <xsl:value-of select="@nsuri"/>
                 Namespace Prefix = <xsl:value-of select="@nsprefix"/>
                 */
@@ -20,12 +20,12 @@
             <xsl:otherwise>
                 public static final javax.xml.namespace.QName MY_QNAME = new javax.xml.namespace.QName(
                 "<xsl:value-of select="@nsuri"/>",
-                "<xsl:value-of select="$name"/>",
+                "<xsl:value-of select="@originalName"/>",
                 "<xsl:value-of select="@nsprefix"/>");
 
             </xsl:otherwise>
         </xsl:choose>
-        <xsl:if test="@type"></xsl:if>
+
 
         <xsl:for-each select="property">
             <xsl:variable name="propertyType"><xsl:value-of select="@type"></xsl:value-of></xsl:variable>
@@ -75,8 +75,9 @@
         * Note - this is not complete
         */
         public javax.xml.stream.XMLStreamReader getPullParser(javax.xml.namespace.QName qName){
-
-        Object[] elementList = new Object[]{
+        <xsl:choose>
+            <xsl:when test="@type">
+                  Object[] elementList = new Object[]{
         <xsl:for-each select="property[not(@attribute)]">
             <xsl:variable name="propertyName"><xsl:value-of select="@name"/></xsl:variable>
             <xsl:variable name="varName">local<xsl:value-of select="@javaname"/></xsl:variable>
@@ -110,8 +111,31 @@
                </xsl:choose>
              </xsl:for-each>
          };
-
          return org.apache.axis2.databinding.utils.ADBPullParser.createPullParser(qName, elementList, attribList);
+            </xsl:when>
+            <xsl:otherwise>
+            //We can safely assume an element has only one type associated with it
+             <!-- This better be only one!!-->
+            <xsl:for-each select="property[@ours]">
+                <xsl:variable name="propertyName"><xsl:value-of select="@name"/></xsl:variable>
+                <xsl:variable name="varName">local<xsl:value-of select="@javaname"/></xsl:variable>
+           return <xsl:value-of select="$varName"/>.getPullParser(MY_QNAME);
+            </xsl:for-each>
+            <!-- What do we do for the other case ???? -->
+             <xsl:for-each select="property[not(@ours)]">
+                <xsl:variable name="propertyName"><xsl:value-of select="@name"/></xsl:variable>
+                <xsl:variable name="varName">local<xsl:value-of select="@javaname"/></xsl:variable>
+            return org.apache.axis2.databinding.utils.ADBPullParser.createPullParser(MY_QNAME,
+                  new Object[]{
+                   "<xsl:value-of select="$propertyName"/>",org.apache.axis2.databinding.schema.util.ConverterUtil.convertToString(<xsl:value-of select="$varName"/>)
+                 },
+                  new Object[]{});
+
+
+            </xsl:for-each>
+            </xsl:otherwise>
+        </xsl:choose>
+
         }
 
         /**

Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/template/java/ADBSupporterTemplate.xsl
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/template/java/ADBSupporterTemplate.xsl?rev=328568&r1=328567&r2=328568&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/template/java/ADBSupporterTemplate.xsl (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/template/java/ADBSupporterTemplate.xsl Tue Oct 25 22:49:21 2005
@@ -35,13 +35,19 @@
 
         public static java.lang.Object fromOM(org.apache.axis2.om.OMElement param,
                 java.lang.Class type){
+
         try{
             <xsl:for-each select="param">
                 <xsl:if test="@type!=''">
                     if (<xsl:value-of select="@type"/>.class.equals(type)){
-                       if (org.apache.axis2.databinding.ADBBean.class.isAssignableFrom(type)){
-
+                       java.lang.reflect.Method parseMethod = <xsl:value-of select="@type"/>.class.getMethod("parse",new Class[]{javax.xml.stream.XMLStreamReader.class});
+                       java.lang.Object obj=null;
+                       if (parseMethod!=null){
+                         obj = parseMethod.invoke(null,new java.lang.Object[]{param.getXMLStreamReader()});
+                       }else{
+                         //oops! we don't know how to deal with this. Perhaps the reflective one is a good choice here
                        }
+                       return obj;
                     }
                 </xsl:if>
             </xsl:for-each>
@@ -53,12 +59,12 @@
 
         //Generates an empty object for testing
         // Caution - need some manual editing to work properly
-        public static org.apache.xmlbeans.XmlObject getTestObject(java.lang.Class type){
+        public static java.lang.Object getTestObject(java.lang.Class type){
         try{
         <xsl:for-each select="param">
             <xsl:if test="@type!=''">
                 if (<xsl:value-of select="@type"/>.class.equals(type)){
-                    <xsl:value-of select="@type"/> emptyObject= new <xsl:value-of select="@type"/>;
+                    <xsl:value-of select="@type"/> emptyObject= new <xsl:value-of select="@type"/>();
                     ////////////////////////////////////////////////
                     // TODO
                     // Fill in the empty object with necessaey values. Empty XMLBeans objects do not generate proper events