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/18 04:49:02 UTC

svn commit: r326016 - in /webservices/axis2/trunk/java/modules/codegen: src/org/apache/axis2/databinding/schema/ src/org/apache/axis2/databinding/schema/template/ test-resources/xsd/ test/org/apache/axis2/databinding/schema/

Author: ajith
Date: Mon Oct 17 19:48:44 2005
New Revision: 326016

URL: http://svn.apache.org/viewcvs?rev=326016&view=rev
Log:
Updated the schema compiler to process  attributes.

Added:
    webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_attrib.xsd
    webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/SimpleAttributeTest.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/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=326016&r1=326015&r2=326016&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 Mon Oct 17 19:48:44 2005
@@ -1,7 +1,5 @@
 package org.apache.axis2.databinding.schema;
 
-import sun.text.CompactShortArray;
-
 import javax.xml.namespace.QName;
 import java.util.Map;
 import java.util.HashMap;
@@ -33,6 +31,7 @@
     private String extensionClassName = "";
     private Map elementToSchemaQNameMap = new HashMap();
     private Map elementToJavaClassMap = new HashMap();
+    private Map attributeFlagMap = new HashMap();
 
     public String getExtensionClassName() {
         return extensionClassName;
@@ -58,20 +57,29 @@
         this.ordered = ordered;
     }
 
-    public void addElementInfo(QName eltQName,QName eltSchemaName,String javaClassName){
-        this.elementToJavaClassMap.put(eltQName,javaClassName);
-        this.elementToSchemaQNameMap.put(eltQName,eltSchemaName);
+    public void registerMapping(QName qName,QName schemaName,String javaClassName){
+           registerMapping(qName,schemaName,javaClassName,false);
+    }
+
+    public void registerMapping(QName qName,QName schemaName,String javaClassName,boolean isAttribute){
+        this.elementToJavaClassMap.put(qName,javaClassName);
+        this.elementToSchemaQNameMap.put(qName,schemaName);
+        this.attributeFlagMap.put(qName,new Boolean(isAttribute));
 
     }
 
-    public QName getSchemaQNameForElement(QName eltQName){
+    public QName getSchemaQNameForQName(QName eltQName){
         return (QName)this.elementToSchemaQNameMap.get(eltQName);
     }
 
-     public String getJavaClassNameForElement(QName eltQName){
+     public String getJavaClassNameForQName(QName eltQName){
         return (String)this.elementToJavaClassMap.get(eltQName);
     }
 
+    public boolean getAttributeStatusForQName(QName qName){
+        Boolean aBoolean = (Boolean) attributeFlagMap.get(qName);
+        return aBoolean != null && aBoolean.booleanValue();
+    }
     public void clearTables(){
         this.elementToJavaClassMap.clear();
         this.elementToSchemaQNameMap.clear();

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=326016&r1=326015&r2=326016&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 Mon Oct 17 19:48:44 2005
@@ -125,15 +125,20 @@
             javaName = getNonConflictingName(propertyNames,javaName);
             XSLTUtils.addAttribute(model,"name",xmlName,property);
             XSLTUtils.addAttribute(model,"javaname",javaName,property);
-            String javaClassNameForElement = metainf.getJavaClassNameForElement(name);
-            String shortTypeName = metainf.getSchemaQNameForElement(name).getLocalPart();
+            String javaClassNameForElement = metainf.getJavaClassNameForQName(name);
+            String shortTypeName = metainf.getSchemaQNameForQName(name).getLocalPart();
             if (javaClassNameForElement==null){
                 throw new SchemaCompilationException("Type missing!");
             }
             XSLTUtils.addAttribute(model,"type",javaClassNameForElement,property);
-            if (typeMap.containsKey(metainf.getSchemaQNameForElement(name))){
+            if (typeMap.containsKey(metainf.getSchemaQNameForQName(name))){
                 XSLTUtils.addAttribute(model,"ours","yes",property); //todo introduce a better name for this
             }
+
+            if (metainf.getAttributeStatusForQName(name)){
+                XSLTUtils.addAttribute(model,"attribute","yes",property);
+            }
+
             XSLTUtils.addAttribute(model,"shorttypename",shortTypeName,property);
         }
 

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=326016&r1=326015&r2=326016&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 Mon Oct 17 19:48:44 2005
@@ -67,7 +67,9 @@
     }
 
     /**
-     *
+     * Compile a list of schemas
+     * This actually calls the compile (XmlSchema s) method repeatedly
+     * @see #compile(org.apache.ws.commons.schema.XmlSchema)
      * @param schemalist
      * @throws SchemaCompilationException
      */
@@ -87,7 +89,7 @@
 
     /**
      *
-     *
+     * Compile (rather codegen) a single schema element
      * @param schema
      * @throws SchemaCompilationException
      */
@@ -124,7 +126,7 @@
             QName qName = schemaType.getQName();
             //find the class name
             String className = findClassName(schemaType);
-            metainf.addElementInfo(schemaElement.getQName(),
+            metainf.registerMapping(schemaElement.getQName(),
                     qName,
                     className);
             String writtenClassName = writer.write(schemaElement,processedTypemap,metainf);
@@ -155,7 +157,8 @@
 
             //at this time it is not wise to directly write the class for the element
             //so we push the complete element to an arraylist and let the process
-            //pass through
+            //pass through. We'll be iterating through the elements writing them
+            //later
 
             if (!isOuter){
                 String className = findClassName(schemaType);
@@ -217,11 +220,23 @@
         if (particle!=null){
             //Process the particle
             processParticle(particle, metaInfHolder);
-        }else{
-            // Process the other types - Say the complex content, extensions and so on
         }
 
+        //process attributes - first look for the explicit attributes
+        XmlSchemaObjectCollection attribs = complexType.getAttributes();
+        Iterator attribIterator = attribs.getIterator();
+        while (attribIterator.hasNext()) {
+            Object o =  attribIterator.next();
+            if (o instanceof XmlSchemaAttribute){
+                processAttribute((XmlSchemaAttribute)o,metaInfHolder);
+
+            }
+        }
+        // Process the other types - Say the complex content, extensions and so on
+
+
         //write the class. This type mapping would have been populated right now
+        //Note - We always write classes for complex types
         String fullyQualifiedClassName = writer.write(complexType,processedTypemap,metaInfHolder);
         //populate the type mapping with the elements
         processedTypemap.put(complexType.getQName(),fullyQualifiedClassName);
@@ -230,6 +245,19 @@
 
     }
 
+    public void processAttribute(XmlSchemaAttribute att,BeanWriterMetaInfoHolder metainf){
+         //for now we assume (!!!) that attributes refer to standard types only
+        QName schemaTypeName = att.getSchemaTypeName();
+        if (baseSchemaTypeMap.containsKey(schemaTypeName)){
+            metainf.registerMapping(att.getQName(),
+                     schemaTypeName,
+                     baseSchemaTypeMap.get(schemaTypeName).toString(),true);
+        } else {
+            //this attribute refers to a custom type, probably one of the extended simple types.
+            //handle it here
+        }
+    }
+
     /**
      *
      * @param particle
@@ -289,7 +317,7 @@
         for (int i = 0; i < processedCount; i++) {
             XmlSchemaElement elt = (XmlSchemaElement)processedElements.get(i);
             String clazzName = (String)processedElementmap.get(elt.getQName());
-            metainfHolder.addElementInfo(elt.getQName(),
+            metainfHolder.registerMapping(elt.getQName(),
                     elt.getSchemaTypeName()
                     ,clazzName);
 

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=326016&r1=326015&r2=326016&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 Mon Oct 17 19:48:44 2005
@@ -33,6 +33,7 @@
          <xsl:variable name="javaName"><xsl:value-of select="@javaname"></xsl:value-of></xsl:variable>
         /**
          * field for <xsl:value-of select="$javaName"/>
+         <xsl:if test="@attribute">* This was an Attribute!</xsl:if>
          */
          private <xsl:value-of select="$propertyType"/> local<xsl:value-of select="$javaName"/>;
 

Added: webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_attrib.xsd
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_attrib.xsd?rev=326016&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_attrib.xsd (added)
+++ webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_attrib.xsd Mon Oct 17 19:48:44 2005
@@ -0,0 +1,21 @@
+<schema targetNamespace="http://soapinterop.org/xsd"
+        xmlns="http://www.w3.org/2001/XMLSchema"
+        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+        xmlns:xsd1="http://soapinterop.org/xsd"
+        elementFormDefault="qualified">
+    <complexType name="SOAPStruct">
+        <all>
+            <element name="varFloat" type="xsd:float"/>
+            <element name="varInt" type="xsd:int"/>
+            <element name="varString" type="xsd:string"/>
+        </all>
+        <attribute name="type1" type="xsd:string"></attribute>
+        <attribute name="type2" type="xsd:string"></attribute>
+            
+    </complexType>
+    <element name="echoStringParam" type="xsd:string"/>
+    <element name="echoStringReturn" type="xsd:string"/>
+    <element name="echoStructParam" type="xsd1:SOAPStruct"/>
+    <element name="echoStructReturn" type="xsd1:SOAPStruct"/>
+</schema>
\ No newline at end of file

Added: webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/SimpleAttributeTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/SimpleAttributeTest.java?rev=326016&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/SimpleAttributeTest.java (added)
+++ webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/SimpleAttributeTest.java Mon Oct 17 19:48:44 2005
@@ -0,0 +1,25 @@
+package org.apache.axis2.databinding.schema;
+/*
+ * 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 SimpleAttributeTest extends AbstractSchemaCompilerTester{
+
+    protected void setUp() throws Exception {
+        this.fileName = "test-resources/xsd/simple_attrib.xsd";
+        super.setUp();
+    }
+
+}