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/11 11:29:35 UTC

svn commit: r312845 - in /webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema: ./ template/ util/

Author: ajith
Date: Tue Oct 11 02:29:11 2005
New Revision: 312845

URL: http://svn.apache.org/viewcvs?rev=312845&view=rev
Log:
1. updated the bean template - Not yet complete!!
2. did some optimization/refactored the code

Added:
    webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaConstants.java
      - copied, changed from r312658, webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/Constants.java
    webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/util/
    webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/util/ConverterUtil.java
Removed:
    webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/Constants.java
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/TypeMap.java
    webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.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=312845&r1=312844&r2=312845&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 11 02:29:11 2005
@@ -1,4 +1,11 @@
 package org.apache.axis2.databinding.schema;
+
+import sun.text.CompactShortArray;
+
+import javax.xml.namespace.QName;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Iterator;
 /*
  * Copyright 2004,2005 The Apache Software Foundation.
  *
@@ -24,6 +31,8 @@
     private boolean ordered = false;
     private boolean extension = false;
     private String extensionClassName = "";
+    private Map elementToSchemaQNameMap = new HashMap();
+    private Map elementToJavaClassMap = new HashMap();
 
     public String getExtensionClassName() {
         return extensionClassName;
@@ -49,5 +58,28 @@
         this.ordered = ordered;
     }
 
+    public void addElementInfo(QName eltQName,QName eltSchemaName,String javaClassName){
+        this.elementToJavaClassMap.put(eltQName,javaClassName);
+        this.elementToSchemaQNameMap.put(eltQName,eltSchemaName);
+
+    }
+
+    public QName getSchemaQNameForElement(QName eltQName){
+        return (QName)this.elementToSchemaQNameMap.get(eltQName);
+    }
+
+     public String getJavaClassNameForElement(QName eltQName){
+        return (String)this.elementToJavaClassMap.get(eltQName);
+    }
+
+    public void clearTables(){
+        this.elementToJavaClassMap.clear();
+        this.elementToSchemaQNameMap.clear();
+
+    }
+
+    public Iterator getElementQNameIterator(){
+        return elementToJavaClassMap.keySet().iterator();
+    }
 
 }

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=312845&r1=312844&r2=312845&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 11 02:29:11 2005
@@ -1,10 +1,7 @@
 package org.apache.axis2.databinding.schema;
 
 import org.apache.ws.commons.schema.XmlSchemaComplexType;
-import org.apache.axis2.util.FileWriter;
-import org.apache.axis2.util.URLProcessor;
-import org.apache.axis2.util.XSLTUtils;
-import org.apache.axis2.util.XSLTTemplateProcessor;
+import org.apache.axis2.util.*;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -12,14 +9,10 @@
 import javax.xml.namespace.QName;
 import javax.xml.transform.Templates;
 import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.Source;
 import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamSource;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import java.util.Map;
 import java.util.Iterator;
+import java.util.Map;
 import java.io.*;
 
 /*
@@ -58,7 +51,7 @@
 
     }
 
-    public void write(XmlSchemaComplexType complexType, Map typeMap,Map currentTypeMap,BeanWriterMetaInfoHolder metainf) throws SchemaCompilationException{
+    public void write(XmlSchemaComplexType complexType, Map typeMap, BeanWriterMetaInfoHolder metainf) throws SchemaCompilationException{
 
         try {
             //determine the package for this type.
@@ -77,23 +70,25 @@
             Element rootElt = XSLTUtils.addChildElement(model,"bean",model);
             XSLTUtils.addAttribute(model,"name",className,rootElt);
             XSLTUtils.addAttribute(model,"package",packageName,rootElt);
+            XSLTUtils.addAttribute(model,"nsuri",qName.getNamespaceURI(),rootElt);
+            XSLTUtils.addAttribute(model,"nsprefix",qName.getPrefix(),rootElt);
             if (metainf.isExtension()){
-             XSLTUtils.addAttribute(model,"extension",metainf.getExtensionClassName(),rootElt);   
+                XSLTUtils.addAttribute(model,"extension",metainf.getExtensionClassName(),rootElt);
             }
             // go in the loop and add the part elements
-            if (currentTypeMap != null && !currentTypeMap.isEmpty()){
-
-                Iterator it = currentTypeMap.keySet().iterator();
-                QName name;
-                while (it.hasNext()) {
-                    Element property = XSLTUtils.addChildElement(model,"property",rootElt);
-                    name = (QName)it.next();
-                    XSLTUtils.addAttribute(model,"name",name.getLocalPart(),property);
-                    XSLTUtils.addAttribute(model,"type",currentTypeMap.get(name).toString(),property);
+            Iterator qNameIterator = metainf.getElementQNameIterator();
 
+            QName name;
+            while (qNameIterator.hasNext()) {
+                Element property = XSLTUtils.addChildElement(model,"property",rootElt);
+                name = (QName)qNameIterator.next();
+                XSLTUtils.addAttribute(model,"name",name.getLocalPart(),property);
+                XSLTUtils.addAttribute(model,"type",metainf.getJavaClassNameForElement(name),property);
+                if (typeMap.containsKey(metainf.getSchemaQNameForElement(name))){
+                    XSLTUtils.addAttribute(model,"ours","yes",property); //todo introduce a better name for this
                 }
+
             }
-            //add the metainf
 
             //create the file
             OutputStream out = createOutFile(packageName,className);
@@ -133,7 +128,7 @@
     }
 
 
-     /**
+    /**
      * Creates the output file
      *
      * @param packageName
@@ -141,15 +136,15 @@
      * @throws Exception
      */
     private OutputStream createOutFile(String packageName, String fileName) throws Exception {
-        File outputFile = FileWriter.createClassFile(this.rootDir,
+        File outputFile = org.apache.axis2.util.FileWriter.createClassFile(this.rootDir,
                 packageName,
                 fileName,
                 ".java");
-           return new FileOutputStream(outputFile);
+        return new FileOutputStream(outputFile);
 
     }
 
-     /**
+    /**
      * Writes the output file
      *
      * @param documentStream
@@ -157,11 +152,11 @@
      */
     private void parse(Document doc,OutputStream outStream) throws Exception {
 
-            XSLTTemplateProcessor.parse(outStream,
-                    doc,
-                    this.templateCache.newTransformer());
-            outStream.flush();
-            outStream.close();
+        XSLTTemplateProcessor.parse(outStream,
+                doc,
+                this.templateCache.newTransformer());
+        outStream.flush();
+        outStream.close();
 
     }
 }

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=312845&r1=312844&r2=312845&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 11 02:29:11 2005
@@ -1,7 +1,6 @@
 package org.apache.axis2.databinding.schema;
 
 import org.apache.ws.commons.schema.*;
-import org.apache.axis2.wsdl.codegen.CodeGenerationException;
 import org.apache.axis2.util.URLProcessor;
 
 import javax.xml.namespace.QName;
@@ -99,7 +98,6 @@
             processElement((XmlSchemaElement)xmlSchemaElementIterator.next());
         }
 
-        //System.out.println("processedTypemap = " + processedTypemap);
     }
 
     /**
@@ -142,18 +140,17 @@
         //
 
         XmlSchemaParticle particle =  complexType.getParticle();
-        Map elementMap = new HashMap();
         BeanWriterMetaInfoHolder metaInfHolder = new BeanWriterMetaInfoHolder();
         if (particle!=null){
             //Process the particle
-            processParticle(particle, elementMap,metaInfHolder);
+            processParticle(particle, metaInfHolder);
         }else{
             XmlSchemaContentModel contentModel = complexType.getContentModel();
             if (contentModel!=null){
                 XmlSchemaContent content =  (contentModel).getContent();
                 if (content instanceof XmlSchemaComplexContentExtension){
                     XmlSchemaComplexContentExtension xmlSchemaComplexContentExtension = (XmlSchemaComplexContentExtension) content;
-                    processParticle(xmlSchemaComplexContentExtension.getParticle(),elementMap,metaInfHolder);
+                    processParticle(xmlSchemaComplexContentExtension.getParticle(),metaInfHolder);
                     metaInfHolder.setExtension(true);
                     metaInfHolder.setExtensionClassName(
                             getJavaClassNameFromComplexTypeQName(
@@ -165,19 +162,15 @@
         }
 
         //write the class. This type mapping would have been populated right now
-        writer.write(complexType,processedTypemap,elementMap,metaInfHolder);
+        writer.write(complexType,processedTypemap,metaInfHolder);
         processedTypemap.put(complexType.getQName(),"");
 
-
-
-
         //populate the type mapping with the elements
 
     }
 
     private void processParticle(XmlSchemaParticle particle, //particle being processed
-                                 Map elementMap, //type map for the current element
-                                 BeanWriterMetaInfoHolder metainfHolder // metainf holder
+                                BeanWriterMetaInfoHolder metainfHolder // metainf holder
     ) throws SchemaCompilationException {
         if (particle instanceof XmlSchemaSequence ){
             XmlSchemaObjectCollection items = ((XmlSchemaSequence)particle).getItems();
@@ -192,15 +185,19 @@
                     QName schemaTypeQName = xsElt.getSchemaType().getQName();
                     Class clazz = (Class)baseSchemaTypeMap.get(schemaTypeQName);
                     if (clazz!=null){
-                        elementMap.put(xsElt.getQName(),clazz.getName());
+                        metainfHolder.addElementInfo(xsElt.getQName(),
+                                                     xsElt.getSchemaTypeName()
+                                                     ,clazz.getName());
                     }else{
-                        elementMap.put(xsElt.getQName(),getJavaClassNameFromComplexTypeQName(schemaTypeQName));
+                         metainfHolder.addElementInfo(xsElt.getQName(),
+                                                     xsElt.getSchemaTypeName()
+                                                     ,getJavaClassNameFromComplexTypeQName(schemaTypeQName));
                     }
                 }else if (item instanceof XmlSchemaComplexContent){
                     // process the extension
                     XmlSchemaContent content = ((XmlSchemaComplexContent)item).getContent();
                     if (content instanceof XmlSchemaComplexContentExtension){
-                        processParticle(((XmlSchemaComplexContentExtension)content).getParticle(),elementMap,metainfHolder);
+                        processParticle(((XmlSchemaComplexContentExtension)content).getParticle(),metainfHolder);
                     }else if (content instanceof XmlSchemaComplexContentRestriction){
                         //handle complex restriction
                     }

Copied: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaConstants.java (from r312658, webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/Constants.java)
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaConstants.java?p2=webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaConstants.java&p1=webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/Constants.java&r1=312658&r2=312845&rev=312845&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/Constants.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaConstants.java Tue Oct 11 02:29:11 2005
@@ -16,7 +16,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-public class Constants{
+public class SchemaConstants {
     public static final String URI_DEFAULT_SCHEMA_XSD = "http://www.w3.org/2001/XMLSchema";
     public static final QName XSD_STRING = new QName(URI_DEFAULT_SCHEMA_XSD, "string");
     public static final QName XSD_BOOLEAN = new QName(URI_DEFAULT_SCHEMA_XSD, "boolean");

Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/TypeMap.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/TypeMap.java?rev=312845&r1=312844&r2=312845&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/TypeMap.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/TypeMap.java Tue Oct 11 02:29:11 2005
@@ -29,27 +29,27 @@
 
     static{
 // If SOAP 1.1 over the wire, map wrapper classes to XSD primitives.
-        addTypemapping(Constants.XSD_STRING, java.lang.String.class);
-        addTypemapping(Constants.XSD_BOOLEAN, java.lang.Boolean.class);
-        addTypemapping(Constants.XSD_DOUBLE, java.lang.Double.class);
-        addTypemapping(Constants.XSD_FLOAT, java.lang.Float.class);
-        addTypemapping(Constants.XSD_INT, java.lang.Integer.class);
-        addTypemapping(Constants.XSD_INTEGER, java.math.BigInteger.class
+        addTypemapping(SchemaConstants.XSD_STRING, java.lang.String.class);
+        addTypemapping(SchemaConstants.XSD_BOOLEAN, java.lang.Boolean.class);
+        addTypemapping(SchemaConstants.XSD_DOUBLE, java.lang.Double.class);
+        addTypemapping(SchemaConstants.XSD_FLOAT, java.lang.Float.class);
+        addTypemapping(SchemaConstants.XSD_INT, java.lang.Integer.class);
+        addTypemapping(SchemaConstants.XSD_INTEGER, java.math.BigInteger.class
         );
-        addTypemapping(Constants.XSD_DECIMAL, java.math.BigDecimal.class
+        addTypemapping(SchemaConstants.XSD_DECIMAL, java.math.BigDecimal.class
         );
-        addTypemapping(Constants.XSD_LONG, java.lang.Long.class);
-        addTypemapping(Constants.XSD_SHORT, java.lang.Short.class);
-        addTypemapping(Constants.XSD_BYTE, java.lang.Byte.class);
+        addTypemapping(SchemaConstants.XSD_LONG, java.lang.Long.class);
+        addTypemapping(SchemaConstants.XSD_SHORT, java.lang.Short.class);
+        addTypemapping(SchemaConstants.XSD_BYTE, java.lang.Byte.class);
 
         // The XSD Primitives are mapped to java primitives.
-        addTypemapping(Constants.XSD_BOOLEAN, boolean.class);
-        addTypemapping(Constants.XSD_DOUBLE, double.class);
-        addTypemapping(Constants.XSD_FLOAT, float.class);
-        addTypemapping(Constants.XSD_INT, int.class);
-        addTypemapping(Constants.XSD_LONG, long.class);
-        addTypemapping(Constants.XSD_SHORT, short.class);
-        addTypemapping(Constants.XSD_BYTE, byte.class);
+        addTypemapping(SchemaConstants.XSD_BOOLEAN, boolean.class);
+        addTypemapping(SchemaConstants.XSD_DOUBLE, double.class);
+        addTypemapping(SchemaConstants.XSD_FLOAT, float.class);
+        addTypemapping(SchemaConstants.XSD_INT, int.class);
+        addTypemapping(SchemaConstants.XSD_LONG, long.class);
+        addTypemapping(SchemaConstants.XSD_SHORT, short.class);
+        addTypemapping(SchemaConstants.XSD_BYTE, byte.class);
 
     }
     private static void addTypemapping(QName name,Class clazz) {

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=312845&r1=312844&r2=312845&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 11 02:29:11 2005
@@ -2,14 +2,19 @@
     <xsl:output method="text"/>
     <xsl:template match="/bean">
     package <xsl:value-of select="@package"/>;
-
+    <xsl:variable name="name"><xsl:value-of select="@name"/></xsl:variable>
 
     /**
      *  Auto generated bean class by the Axis code generator
      */
 
-    public class <xsl:value-of select="@name"/> <xsl:if test="@extension"> extends <xsl:value-of select="@extension"/></xsl:if>{
+    public class <xsl:value-of select="$name"/> <xsl:if test="@extension"> extends <xsl:value-of select="@extension"/></xsl:if>
+        implements org.apache.axis2.databinding.ADBBean{
 
+      private static final javax.xml.namespace.QName qName = new javax.xml.namespace.QName(
+                                      "<xsl:value-of select="@nsuri"/>",
+                                      "<xsl:value-of select="$name"/>",
+                                      "<xsl:value-of select="@nsprefix"/>");
 
      <xsl:for-each select="property">
          <xsl:variable name="propertyType"><xsl:value-of select="@type"></xsl:value-of></xsl:variable>
@@ -35,6 +40,31 @@
              this.local<xsl:value-of select="$propertyName"/>=param<xsl:value-of select="$propertyName"/>;
         }
      </xsl:for-each>
+
+        /**
+         * databinding method to get an XML representation of this object
+         * Note - this is not complete
+         */
+        public javax.xml.stream.XMLStreamReader getPullParser(){
+
+          java.util.List list = new  java.util.ArrayList();
+          <xsl:for-each select="property">
+           <xsl:variable name="propertyName"><xsl:value-of select="@name"></xsl:value-of></xsl:variable>
+           list.add(org.apache.axis2.databinding.schema.util.ConverterUtil.convertToObject(local<xsl:value-of select="$propertyName"></xsl:value-of>));
+          </xsl:for-each>
+
+          return null;
+
+        }
+
+        /**
+         * static method to create the object
+         * Note -  This is not complete
+         */
+        public static <xsl:value-of select="$name"/> parse(javax.xml.stream.XMLStreamReader reader){
+             return new <xsl:value-of select="$name"/>();
+        }
+
     }
     </xsl:template>
  </xsl:stylesheet>

Added: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/util/ConverterUtil.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/util/ConverterUtil.java?rev=312845&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/util/ConverterUtil.java (added)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/util/ConverterUtil.java Tue Oct 11 02:29:11 2005
@@ -0,0 +1,37 @@
+package org.apache.axis2.databinding.schema.util;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+public class ConverterUtil {
+
+    public static Object convertToObject(int i){
+        return new Integer(i);
+    }
+
+     public static Object convertToObject(float i){
+        return new Float(i);
+    }
+
+    public static Object convertToObject(long i){
+        return new Long(i);
+    }
+
+    //the pass through method
+    public static Object convertToObject(Object o){
+        return o;
+    }
+    //add the others here
+}