You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by na...@apache.org on 2006/12/22 07:35:37 UTC

svn commit: r489565 [1/2] - in /webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl: symbolTable/ wsdl2ws/ wsdl2ws/c/ wsdl2ws/c/literal/ wsdl2ws/cpp/ wsdl2ws/cpp/literal/ wsdl2ws/info/

Author: nadiramra
Date: Thu Dec 21 22:35:36 2006
New Revision: 489565

URL: http://svn.apache.org/viewvc?view=rev&rev=489565
Log:
AXISCPP-898 simple problem with simpleTypes.

Modified:
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/symbolTable/CElementDecl.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/symbolTable/CSchemaUtils.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WSDL2Ws.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubHeaderWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParamCPPFileWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/Type.java

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/symbolTable/CElementDecl.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/symbolTable/CElementDecl.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/symbolTable/CElementDecl.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/symbolTable/CElementDecl.java Thu Dec 21 22:35:36 2006
@@ -17,8 +17,6 @@
 
 package org.apache.axis.wsdl.symbolTable;
 
-import java.util.Vector;
-
 import javax.xml.namespace.QName;
 
 /**
@@ -65,12 +63,6 @@
     //This specifies whether the element must be namespace qualified or not in the SOAP message.
     private boolean nsQualified = false;
     
-    // vvv FJP - 17667
-    private boolean restriction = false;
-    private String  restrictionBase = null;
-    private Vector  restrictionPattern = null;
-    private Vector  restrictionEnumeration = null;
-    // ^^^ FJP - 17667
     
     /** Field documentation */
     private String documentation;
@@ -232,62 +224,4 @@
         this.documentation = documentation;
     }
 
-    // vvv FJP - 17667
-    /**
-     * @return Returns the restriction.
-     */
-    public boolean isRestriction()
-    {
-        return restriction;
-    }
-    /**
-     * @param restriction The restriction to set.
-     */
-    public void setRestriction(boolean restriction)
-    {
-        this.restriction = restriction;
-    }
-    /**
-     * @return Returns the restrictionBase.
-     */
-    public String getRestrictionBase()
-    {
-        return restrictionBase;
-    }
-    /**
-     * @param restrictionBase The restrictionBase to set.
-     */
-    public void setRestrictionBase(String restrictionBase)
-    {
-        this.restrictionBase = restrictionBase;
-    }
-    /**
-     * @return Returns the restrictionEnumeration.
-     */
-    public Vector getRestrictionEnumeration()
-    {
-        return restrictionEnumeration;
-    }
-    /**
-     * @param restrictionEnumeration The restrictionEnumeration to set.
-     */
-    public void setRestrictionEnumeration(Vector restrictionEnumeration)
-    {
-        this.restrictionEnumeration = restrictionEnumeration;
-    }
-    /**
-     * @return Returns the restrictionPattern.
-     */
-    public Vector getRestrictionPattern()
-    {
-        return restrictionPattern;
-    }
-    /**
-     * @param restrictionPattern The restrictionPattern to set.
-     */
-    public void setRestrictionPattern(Vector restrictionPattern)
-    {
-        this.restrictionPattern = restrictionPattern;
-    }
-    // ^^^ FJP - 17667
 }

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/symbolTable/CSchemaUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/symbolTable/CSchemaUtils.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/symbolTable/CSchemaUtils.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/symbolTable/CSchemaUtils.java Thu Dec 21 22:35:36 2006
@@ -30,7 +30,6 @@
 import org.apache.axis.wsdl.wsdl2ws.info.ElementInfo;
 import org.w3c.dom.DOMException;
 import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
@@ -202,7 +201,9 @@
      * @param symbolTable 
      * @return 
      */
-    public static Vector getContainedElementDeclarations( Node node, SymbolTable symbolTable)
+    public static Vector getContainedElementDeclarations(
+        Node node,
+        SymbolTable symbolTable)
     {
 
         if (node == null)
@@ -339,19 +340,30 @@
                 {
                     if (subNodeKind.getLocalPart().equals("sequence"))
                     {
-                        v.addAll( processSequenceNode(children.item(j), symbolTable));
+                        v.addAll(
+                            processSequenceNode(children.item(j), symbolTable));
                     }
-                    else if (subNodeKind.getLocalPart().equals("all"))
+                    else
+                        if (subNodeKind.getLocalPart().equals("all"))
                         {
-                        v.addAll( processAllNode(children.item(j), symbolTable));
+                            v.addAll(
+                                processAllNode(children.item(j), symbolTable));
                         }
-                    else if (subNodeKind.getLocalPart().equals("choice"))
+                        else
+                            if (subNodeKind.getLocalPart().equals("choice"))
                             {
-                        v.addAll( processChoiceNode( children.item(j), symbolTable));
+                                v.addAll(
+                                    processChoiceNode(
+                                        children.item(j),
+                                        symbolTable));
                             }
-                    else if (subNodeKind.getLocalPart().equals("group"))
+                            else
+                                if (subNodeKind.getLocalPart().equals("group"))
                                 {
-                        v.addAll( processGroupNode( children.item(j), symbolTable));
+                                    v.addAll(
+                                        processGroupNode(
+                                            children.item(j),
+                                            symbolTable));
                                 }
                 }
             }
@@ -2158,56 +2170,6 @@
         }
     }
 
-    // vvv FJP - 17667
-    private static void addRestrictionsToVector( Vector v, Node child, SymbolTable symbolTable, String base, String restType)
-    {
-        CElementDecl elem = new CElementDecl();
-        Vector       vr = null;
-        
-        NamedNodeMap nodeAttribs = child.getAttributes();
-
-        if( nodeAttribs != null)
-        {
-            for( int i = 0; i < nodeAttribs.getLength(); i++)
-            {
-                if( vr == null)
-                {
-                    vr = new Vector();
-                }
-                
-                if( nodeAttribs.item(i).getLocalName().equals( "name"))
-                {
-                    vr.add( nodeAttribs.item(i).getNodeValue());
-                }
-                else if( nodeAttribs.item(i).getLocalName().equals( "type"))
-                {
-                    vr.add( nodeAttribs.item(i).getNodeValue());
-                }
-                else if( nodeAttribs.item(i).getLocalName().equals( "value"))
-                {
-                    vr.add( nodeAttribs.item(i).getNodeValue());
-                }
-            }
-        }
-        
-        elem.setRestriction( true);
-        elem.setRestrictionBase( base);
-        
-        if( restType.equals( "pattern"))
-        {
-            elem.setRestrictionPattern( vr);
-        }
-        else
-        {
-            elem.setRestrictionEnumeration( vr);
-        }
-        
-        elem.setName( VALUE_QNAME);
-        
-        v.add( elem);
-    }
-    // ^^^ FJP - 17667
-
     /**
      * Return the attribute names and types if any in the node
      * The even indices are the attribute types (TypeEntry) and
@@ -2228,8 +2190,11 @@
      * @param symbolTable 
      * @return 
      */
-    public static Vector getContainedAttributeTypes( Node node, SymbolTable symbolTable)
+    public static Vector getContainedAttributeTypes(
+        Node node,
+        SymbolTable symbolTable)
     {
+
         Vector v = null; // return value
 
         if (node == null)
@@ -2322,75 +2287,15 @@
                 }
                 else
                 {
+
                     // we have an attribute
                     addAttributeToVector(v, child, symbolTable);
                 }
             }
         }
 
-// vvv FJP - 17667 - Code added
-// Expecting a schema simpleType
-        if (isXSDNode(node, "simpleType"))
-        {
-            // Under the simpleType there could be a restriction
-            NodeList children = node.getChildNodes();
-            Node     content = null;
-            String 	 base = null;
-            String   restType = null;
-
-            for (int j = 0; j < children.getLength(); j++)
-            {
-                Node kid = children.item(j);
-
-                if( isXSDNode(kid, "restriction"))
-                {
-                    content = kid;
-                    
-                    NamedNodeMap nnm = kid.getAttributes();
-
-                    for( int k = 0; k < nnm.getLength(); k++)
-                    {
-                        Node an = nnm.item( k);
-                        
-                        if( an.getLocalName().equals( "base"))
-                        {
-                            base = an.getNodeValue();
-                            
-                            break;
-                        }
-                    }
-                    break;
-                }
-            }
-
-            // Check for extensions or restrictions
-            if (content != null)
-            {
-                children = content.getChildNodes();
-
-                for (int j = 0; j < children.getLength(); j++)
-                {
-                    Node kid = children.item(j);
-
-                    if (isXSDNode(kid, "pattern")
-                        || isXSDNode(kid, "enumeration"))
-                    {
-                        restType = kid.getLocalName();
-
-    	                if (v == null)
-    	                {
-    	                    v = new Vector();
-    	                }
-    	
-                        addRestrictionsToVector( v, kid, symbolTable, base, restType);
-                    }
-                }
-            }
-        }
-
         return v;
     }
-    // ^^^ FJP - 17667
 
     // list of all of the XSD types in Schema 2001
 

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java Thu Dec 21 22:35:36 2006
@@ -39,6 +39,7 @@
 import org.apache.axis.wsdl.wsdl2ws.info.Type;
 import org.apache.axis.wsdl.wsdl2ws.info.TypeMap;
 import org.apache.axis.wsdl.wsdl2ws.info.WebServiceContext;
+import org.apache.axis.wsdl.symbolTable.CSchemaUtils;
 
 public class CUtils 
 {
@@ -825,14 +826,25 @@
     public static boolean isPointerType(String name)
     {
         Object o = isPointerBasedType.get(name);
-        boolean    b = false;
         
         if( o != null)
-            b = ((Boolean) isPointerBasedType.get(name)).booleanValue();
+            return ((Boolean)o).booleanValue();
         
-        return b;
+        return false;
     }
-    
+    public static boolean isPointerType(QName name)
+    {
+        Object o;
+        if (cpp)
+            o = qname2classmapCpp.get(name);
+        else
+            o = qname2classmapC.get(name);
+        
+        if (o != null)
+            return isPointerType((String)o);
+
+        return false;
+    }    
     public static boolean isAnyType(QName name)
     {
             return name.equals(anyTypeQname);
@@ -871,6 +883,7 @@
             
             return methodname;
         }
+
         return null;    
     }
     
@@ -894,9 +907,10 @@
             val = qname2classmapCpp.get(qname);
         else
             val = qname2classmapC.get(qname);
-        if (val != null)
-            return (String) val;
-        val = schemaDefinedSimpleTypesMap.get(qname);
+        
+        if (val == null)
+            val = schemaDefinedSimpleTypesMap.get(qname);
+        
         if (val != null)
             return (String) val;
         return null;
@@ -928,10 +942,7 @@
         else
             enumName = (String)basicType2EnumMapC.get(stype);
         
-        if(enumName != null)
-            return enumName;
-
-        return null;    
+        return enumName;   
     }
     public static String getCmplxArrayNameforType(QName qname)
     {
@@ -953,7 +964,7 @@
         else if (!cpp && type2BasicArrayNameC.containsKey(stype))
             return (String)type2BasicArrayNameC.get(stype);
         else
-            return "";
+            return stype + "_Array";
     }
     
     /**
@@ -961,11 +972,13 @@
      * a Vector is returned which contains the base type and the values (enumerations etc).
      * The first element in the vector is the base type (an TypeEntry).
      * Subsequent elements are QNames.
+     * NEEDS WORK - CURRENTLY THE ONLY THING WE DO IS GENERATE ENUMERATOR CONSTANTS AND CREATE
+     * AN EMPTY RESTRICTOR FUNCTION WHEN DOING CODE GENERATION STEP.
      */
-    public static Vector getRestrictionBaseAndValues(Node node, SymbolTable symbolTable) 
+    public static void setRestrictionBaseAndValues(Type typedata, Node node, SymbolTable symbolTable) 
     {
         if (node == null)
-            return null;
+            return;
 
         // If the node kind is an element, dive into it.
         QName nodeKind = Utils.getNodeQName(node);
@@ -1006,28 +1019,169 @@
                     Constants.isSchemaXSD(restrictionKind.getNamespaceURI()))
                     restrictionNode = children.item(j);
             }
+            
+            // If no restriction node, just return
+            if (restrictionNode == null)
+                return;
 
             // The restriction node indicates the type being restricted
             // (the base attribute contains this type).
-            // The base type must be a simple type, and not boolean
-            TypeEntry baseEType = null;
-            if (restrictionNode != null) 
+            QName baseType = Utils.getTypeQName(restrictionNode, new BooleanHolder(), false);
+            TypeEntry baseEType = symbolTable.getType(baseType);
+            
+            if (baseEType != null) 
             {
-                QName baseType = Utils.getTypeQName(restrictionNode, new BooleanHolder(), false);
-                baseEType = symbolTable.getType(baseType);
-                if (baseEType != null) 
+                QName  typedataQName     = typedata.getName();
+                String typedataLocalpart = typedataQName.getLocalPart();
+                String baseTypeLocalpart = baseEType.getQName().getLocalPart();
+                
+                QName  typedataQNameSanitized     = null;
+                String typedataLocalpartSanitized = null;
+                String baseTypeLocalpartSanitized = null;
+                
+                Boolean isPointer   = null;
+                String methodSuffix = null;
+                
+                String primitiveXSDType          = null;
+                String initValueForType          = null;
+                String classForPrimitiveType     = null;
+                
+                if (TypeMap.isAnonymousType(typedataLocalpart))
                 {
-                    String javaName = TypeMap.getBasicTypeClass4qname(baseEType.getQName());
-                    //String javaName = baseEType.getName();
-                    if (javaName == null || javaName.equals("boolean") ||
-                            ! SchemaUtils.isSimpleSchemaType(baseEType.getQName())) 
-                        baseEType = null;
+                    typedataQNameSanitized     = new QName(typedataQName.getNamespaceURI(), sanitiseClassName(typedataLocalpart));
+                    typedataLocalpartSanitized = sanitiseClassName(typedataLocalpart);
                 }
-            }
+                
+                if (TypeMap.isAnonymousType(baseTypeLocalpart))
+                    baseTypeLocalpartSanitized = sanitiseClassName(baseTypeLocalpart);
+                
+                String class4qname          = null;
+                String class4qnameSanitized = null;
+                
+                String javaName = TypeMap.getBasicTypeClass4qname(baseEType.getQName());
+                boolean isBaseTypePrimitive = javaName != null;
+                
+                QName primitiveBaseTypeQName = null;
+                
+                if (javaName == null)
+                {
+                    // No mapping - ensure that the base type is simple - if it is, then this 
+                    // must be a user-defined simple type that is based on another user-defined
+                    // simple type.
+                    if (!baseEType.isSimpleType()
+                            && !SchemaUtils.isSimpleSchemaType(baseEType.getQName())) 
+                        return;
+
+                    // Get the primitive base type
+                    TypeEntry primitiveBaseType = CSchemaUtils.getBaseType(baseEType, symbolTable);
+                    primitiveBaseTypeQName      = primitiveBaseType.getQName();
+                }
+                else if (javaName.equals("boolean"))
+                    return;
+                else
+                    primitiveBaseTypeQName = baseEType.getQName();
+                
+                classForPrimitiveType = getclass4qname(primitiveBaseTypeQName);
+                initValueForType      = getInitValue(classForPrimitiveType);
+                
+                // Set the base type for Type
+                typedata.setBaseType(primitiveBaseTypeQName);
+                
+                // We will map the user-defined type to the user-defined type, so set
+                // mapping for the type.
+                class4qname          = typedataLocalpart;
+                class4qnameSanitized = typedataLocalpartSanitized;
+                
+                // Update some commonly-used mapping tables to reflect the user-defined
+                // simple type. If anonymous type, we need to update mapping tables twice: once
+                // with the anonymous names, and once with the sanitized names. 
+                
+                isPointer = new Boolean(isPointerType(primitiveBaseTypeQName));
+                primitiveXSDType = getXSDTypeForBasicType(classForPrimitiveType);
 
-            // Process the enumeration elements underneath the restriction node
-            if (baseEType != null && restrictionNode != null) 
-            {
+                if (!isBaseTypePrimitive)
+                {
+                    typedata.setRestrictionBaseType(baseTypeLocalpart);
+                    isPointerBasedType.put(baseTypeLocalpart, isPointer);
+                }
+                isPointerBasedType.put(typedataLocalpart, isPointer);                    
+
+                if (cpp)
+                {
+                    methodSuffix = (String)type2getValueMethodNameCpp.get(classForPrimitiveType);
+                    
+                    qname2classmapCpp.put(typedataQName, class4qname);
+                    basicType2EnumMapCpp.put(typedataLocalpart, primitiveXSDType);
+                    if (initValueForType != null)
+                        initValuesCpp.put(typedataLocalpart, initValueForType);
+                    type2getValueMethodNameCpp.put(typedataLocalpart, methodSuffix);
+                    
+                    if (!isBaseTypePrimitive)
+                    {
+                        basicType2EnumMapCpp.put(baseTypeLocalpart, primitiveXSDType);
+                        if (initValueForType != null)
+                            initValuesCpp.put(baseTypeLocalpart, initValueForType);
+                        type2getValueMethodNameCpp.put(baseTypeLocalpart, methodSuffix);
+                    }
+
+                    if (typedataQNameSanitized != null)
+                    {
+                        isPointerBasedType.put(typedataLocalpartSanitized, isPointer); 
+                        qname2classmapCpp.put(typedataQNameSanitized, class4qnameSanitized);
+                        basicType2EnumMapCpp.put(typedataLocalpartSanitized, primitiveXSDType);
+                        if (initValueForType != null)
+                            initValuesCpp.put(typedataLocalpartSanitized, initValueForType);
+                        type2getValueMethodNameCpp.put(typedataLocalpartSanitized, methodSuffix);
+                    }
+                    
+                    if (baseTypeLocalpartSanitized != null)
+                    {
+                        isPointerBasedType.put(baseTypeLocalpartSanitized, isPointer);
+                        basicType2EnumMapCpp.put(baseTypeLocalpartSanitized, primitiveXSDType);
+                        if (initValueForType != null)
+                            initValuesCpp.put(baseTypeLocalpartSanitized, initValueForType);
+                        type2getValueMethodNameCpp.put(baseTypeLocalpartSanitized, methodSuffix);
+                    }
+                }
+                else
+                {
+                    methodSuffix = (String)type2getValueMethodNameC.get(classForPrimitiveType);
+                    
+                    qname2classmapC.put(typedataQName, class4qname);
+                    basicType2EnumMapC.put(typedataLocalpart, primitiveXSDType);
+                    if (initValueForType != null)
+                        initValuesC.put(typedataLocalpart, initValueForType);
+                    type2getValueMethodNameC.put(typedataLocalpart, methodSuffix);
+                    
+                    if (!isBaseTypePrimitive)
+                    {
+                        basicType2EnumMapC.put(baseTypeLocalpart, primitiveXSDType);
+                        if (initValueForType != null)
+                            initValuesC.put(baseTypeLocalpart, initValueForType);
+                        type2getValueMethodNameC.put(baseTypeLocalpart, methodSuffix);
+                    }
+
+                    if (typedataQNameSanitized != null)
+                    {
+                        isPointerBasedType.put(typedataLocalpartSanitized, isPointer); 
+                        qname2classmapC.put(typedataQNameSanitized, class4qnameSanitized);
+                        basicType2EnumMapC.put(typedataLocalpartSanitized, primitiveXSDType);
+                        if (initValueForType != null)
+                            initValuesC.put(typedataLocalpartSanitized, initValueForType);
+                        type2getValueMethodNameC.put(typedataLocalpartSanitized, methodSuffix);
+                    }
+                    
+                    if (baseTypeLocalpartSanitized != null)
+                    {
+                        isPointerBasedType.put(baseTypeLocalpartSanitized, isPointer);
+                        basicType2EnumMapC.put(baseTypeLocalpartSanitized, primitiveXSDType);
+                        if (initValueForType != null)
+                            initValuesC.put(baseTypeLocalpartSanitized, initValueForType);
+                        type2getValueMethodNameC.put(baseTypeLocalpartSanitized, methodSuffix);
+                    }
+                }                
+                
+                // Process the enumeration elements underneath the restriction node
                 Vector v = new Vector();                
                 NodeList enums = restrictionNode.getChildNodes();
                 for (int i=0; i < enums.getLength(); i++) 
@@ -1037,21 +1191,25 @@
                     {
                         Node enumNode = enums.item(i);
                         String value = Utils.getAttribute(enumNode, "value");
-
-                        // HACK wollsch
+    
                         if (value.indexOf(':')>0)                                                        
                                 value=value.substring(value.indexOf(':')+1,value.length());
                         v.add(new QName(value, enumKind.getLocalPart()));
                     }
                 }
                 
-                // is this really an enumeration?
                 // The first element in the vector is a TypeEntry.
                 v.add(0,baseEType);
-                return v;
+                typedata.setRestrictiondata(v);
+                typedata.setRestriction(true);
+                
+                // Add schema-defined simple type to mapping table - TODO: not sure we need this anymore.
+                CUtils.addSchemaDefinedSimpleType(typedataQName, class4qname);
+                if (typedataQNameSanitized != null)
+                    CUtils.addSchemaDefinedSimpleType(typedataQNameSanitized, class4qnameSanitized);
             }
         }
-        return null;
+        return;
     }    
     
     public static String sanitiseClassName( String name)
@@ -1072,11 +1230,11 @@
         
         return sanitisedName;
     }
-
+    
     public static String sanitiseAttributeName( String classname, String name)
     {
         String sanitisedName = sanitiseClassName( name);
-
+        
         if( classname.equals( sanitisedName))
             sanitisedName += "_";
         
@@ -1161,58 +1319,5 @@
         
         return sNew;
     }
-    // vvv FJP - 17667
-    public static Type findBaseTypeOfRestriction( Type type, WebServiceContext wscontext)
-    {
-        // FJP - Find base type of the restricted type.
-        Type   restType = type;
-        String restBaseType = null;
-        int    restBaseCount = 10;
-        String restBaseClass = null;
-        
-        while( restType != null && restBaseClass == null && restBaseCount > 0)
-        {
-            restBaseType = restType.getRestrictionBase();
-            restBaseType = restBaseType.substring( restBaseType.indexOf( ":") + 1);
-            restBaseCount--;
-            // Is the restBaseType as base type?
-            restBaseClass = CUtils.getclass4qname( new QName( WrapperConstants.SOAPENC_NAMESPACE, restBaseType));
-
-            while( restBaseClass == null && restType != null)
-            {
-                // Find the type in the type list.
-                Iterator theBaseTypes = wscontext.getTypemap().getTypes().iterator();
-                
-                restType = null;
-                
-                while( theBaseTypes.hasNext())
-                {
-                    Type aType = (Type) theBaseTypes.next();
-                    
-                    if( aType.getName().getLocalPart().equals( restBaseType))
-                    {
-                        restType = aType;
-                        restBaseType = restType.getRestrictionBase();
-                        restBaseType = restBaseType.substring( restBaseType.indexOf( ":") + 1);
-                        restBaseClass = CUtils.getclass4qname( new QName( WrapperConstants.SOAPENC_NAMESPACE, restBaseType));
-                        break;
-                    }
-                }
-            }
-        }
-
-        return restType;
-    }
-    // ^^^ FJP - 17667
-
-    // vvv FJP - 17667
-    public static String getBaseTypeOfRestrictionAsString( Type type)
-    {
-        String restBaseType = type.getRestrictionBase();
-        restBaseType = restBaseType.substring( restBaseType.indexOf( ":") + 1);
-        
-        return CUtils.getclass4qname( new QName( WrapperConstants.SOAPENC_NAMESPACE, restBaseType));
-    }
-    // ^^^ FJP - 17667
 }
 

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WSDL2Ws.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WSDL2Ws.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WSDL2Ws.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WSDL2Ws.java Thu Dec 21 22:35:36 2006
@@ -822,7 +822,6 @@
 
         Node node = type.getNode();
 
-        Vector restrictdata = null;
         if (type.isSimpleType())
         {
             //check for extended types
@@ -841,39 +840,17 @@
                             + type.getQName().getLocalPart() + "=====\n");
             }
             else
-            {
-                //types declared as simpleType
-                restrictdata = CUtils.getRestrictionBaseAndValues(node, symbolTable);
-                if (restrictdata != null)
-                    typedata.setRestrictiondata(restrictdata);
-            }
+                CUtils.setRestrictionBaseAndValues(typedata, node, symbolTable);
             
             // There can be attributes in this extended basic type
             Vector attributes = CSchemaUtils.getContainedAttributeTypes(type.getNode(), symbolTable);
             if (attributes != null)
-            {
-                if( attributes.get(0).getClass() == CElementDecl.class)
-	                for (int j = 0; j < attributes.size(); j++)
-	                {
-	                    CElementDecl ed = (CElementDecl) attributes.get(j);
-	                    
-	                    if( ed.isRestriction())
-	                    {
-	                        typedata.setRestriction( true);
-	                        typedata.setRestrictionBase( ed.getRestrictionBase());
-	                        typedata.setRestrictionEnumeration( ed.getRestrictionEnumeration());
-	                        typedata.setRestrictionPattern( ed.getRestrictionPattern());
-	                    }
-	                }
-                else
-                    for (int j = 0; j < attributes.size(); j += 2)
-                    {
-                        newSecondaryType = createTypeInfo(((TypeEntry) attributes.get(j)).getQName(), targetLanguage);
-                        typedata.addRelatedType(newSecondaryType);
-                        typedata.setTypeForAttributeName(
-                            ((QName) attributes.get(j + 1)).getLocalPart(), newSecondaryType);
-                    }
-            }
+                for (int j = 0; j < attributes.size(); j += 2)
+                {
+                    newSecondaryType = createTypeInfo(((TypeEntry) attributes.get(j)).getQName(), targetLanguage);
+                    typedata.addRelatedType(newSecondaryType);
+                    typedata.setTypeForAttributeName(((QName) attributes.get(j + 1)).getLocalPart(), newSecondaryType);
+                }
         }
         else if (type instanceof CollectionType)
         {
@@ -969,22 +946,6 @@
                                                     true,
                                                     targetLanguage);
                             }
-                            // vvv FJP - 17667
-                            // FJP - Check if element is an extension or restriction
-                            else if( elem.isRestriction())
-                            { // 8 
-                                typedata.setRestriction( true);
-                                typedata.setRestrictionBase( elem.getRestrictionBase());
-                                typedata.setRestrictionEnumeration(elem.getRestrictionEnumeration());
-                                typedata.setRestrictionPattern( elem.getRestrictionPattern());
-
-                                eleinfo = new ElementInfo( elem.getName(),
-                                        				   new Type( CUtils.anyTypeQname,
-                                        				           	 CUtils.anyTypeQname.getLocalPart(),
-                                        				           	 true,
-                                        				           	 targetLanguage));
-                            } // 8
-                            // ^^^ FJP - 17667
                             else
                             {
                                 QName typeName = elem.getType().getQName();

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java Thu Dec 21 22:35:36 2006
@@ -39,11 +39,6 @@
 
 public class BeanParamWriter extends ParamCFileWriter
 {
-    /**
-     * @param wscontext
-     * @param type
-     * @throws WrapperFault
-     */
     public BeanParamWriter(WebServiceContext wscontext, Type type)
         throws WrapperFault
     {
@@ -149,21 +144,14 @@
                     soapTagName = soapTagName.substring(1, soapTagName.length());
 
                 Type type = attribs[i].getType();
-                boolean isPointerType = false;
                 String basicType = null;
                 
                 if (!attribs[i].isSimpleType() && type.isSimpleType())
-                {
-                    basicType = CUtils.getclass4qname(attribs[i].getType().getBaseType());
-                    isPointerType = CUtils.isPointerType(CUtils.getclass4qname(type.getBaseType())); 
-                }
+                    basicType = CUtils.getclass4qname(type.getBaseType());
                 else
-                {
                     basicType = attribs[i].getTypeName();
-                    isPointerType = CUtils.isPointerType(attribs[i].getTypeName());
-                }
                 
-                if (isPointerType)
+                if (CUtils.isPointerType(basicType))
                 {
                     writer.write("\tif (0 != param->" + attribs[i].getParamNameAsMember() + ")\n");
                     writer.write("\t\taxiscSoapSerializerSerializeAsAttribute(pSZ,\""
@@ -180,17 +168,6 @@
                             + "), "
                             + CUtils.getXSDTypeForBasicType(attribs[i].getTypeName()) + ");\n");
                 }
-                
-                if (!attribs[i].isOptional())
-                {
-                    /* This avoid segmentation fault at runtime */
-                    /*
-                     * writer.write("\telse\n");
-                     * writer.write("\t\tAXISTRACE1(\"The mandatory attribute
-                     * "+attribs[i].getParamName()+" is not set\",
-                     * CRITICAL);\n");
-                     */
-                }
             }
         }
         
@@ -404,7 +381,6 @@
 
     /**
      * @throws IOException
-     * @throws WrapperFault
      */
     private void writeDeSerializeGlobalMethod() throws IOException, WrapperFault
     {

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java Thu Dec 21 22:35:36 2006
@@ -27,9 +27,9 @@
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Vector;
-import java.util.HashSet;
 
 import javax.xml.namespace.QName;
 
@@ -38,25 +38,16 @@
 import org.apache.axis.wsdl.wsdl2ws.ParamWriter;
 import org.apache.axis.wsdl.wsdl2ws.WSDL2Ws;
 import org.apache.axis.wsdl.wsdl2ws.WrapperFault;
-import org.apache.axis.wsdl.wsdl2ws.WrapperUtils;
 import org.apache.axis.wsdl.wsdl2ws.info.Type;
 import org.apache.axis.wsdl.wsdl2ws.info.WebServiceContext;
 
 public class ParmHeaderFileWriter extends ParamWriter
 {
-    /**
-     * @param wscontext
-     * @param type
-     * @throws WrapperFault
-     */
     public ParmHeaderFileWriter(WebServiceContext wscontext, Type type) throws WrapperFault
     {
         super(wscontext, type);
     }
 
-    /* (non-Javadoc)
-     * @see org.apache.axis.wsdl.wsdl2ws.SourceWriter#writeSource()
-     */
     public void writeSource() throws WrapperFault
     {
         try
@@ -69,7 +60,7 @@
             this.writer.write("#define __" + classname.toUpperCase() + "_H__INCLUDED_\n\n");
             
             if (type.isSimpleType())
-                writeSimpleTypeWithEnumerations();
+                writeSimpleTypeWithRestrictions();
             else
             {
                 writePreprocessorStatements();
@@ -110,7 +101,7 @@
     /**
      * @throws WrapperFault
      */
-    protected void writeSimpleTypeWithEnumerations() throws WrapperFault
+    protected void writeSimpleTypeWithRestrictions() throws WrapperFault
     {
         try
         {
@@ -125,9 +116,24 @@
             if (!CUtils.isSimpleType(baseType))
                 return;
             
+            String baseTypeName = CUtils.getclass4qname(baseType);
+            String langTypeName;
+            
+            // User defined simple type based on another user-defined simple type
+            String  restrictionBaseType = type.getRestrictionBaseType();
+            if (null != restrictionBaseType )
+            {  
+                langTypeName = CUtils.sanitiseClassName(restrictionBaseType);               
+                writer.write( "#include \"" + langTypeName + ".hpp\"\n\n");
+            }
+            else
+                langTypeName = baseTypeName;
+            
+
+
             writer.write("\n");
             writer.write("/* ********************************************************************* */\n");
-            writer.write("/* --- Simple types and enumerations                                 --- */\n");
+            writer.write("/* --- Simple types and restrictions                                 --- */\n");
             writer.write("/* ********************************************************************* */\n");
             writer.write("\n");  
             
@@ -146,11 +152,10 @@
                     break;
             }
             
-            String langTypeName = CUtils.getclass4qname(baseType);
             writer.write("typedef ");
-            if (CUtils.isPointerType(CUtils.getclass4qname(baseType)) 
-                    || "xsdc__base64Binary".equals(CUtils.getclass4qname(baseType)) 
-                    || "xsdc__hexBinary".equals(CUtils.getclass4qname(baseType)))
+            if (CUtils.isPointerType(baseTypeName) 
+                    || "xsdc__base64Binary".equals(baseTypeName) 
+                    || "xsdc__hexBinary".equals(baseTypeName))
             {
                 writer.write(langTypeName + " " + classname + ";\n");
                 writer.write("typedef " + langTypeName + "_Array " + classname + "_Array;\n");
@@ -182,11 +187,14 @@
             } 
             else if ("int".equals(baseType.getLocalPart()))
             {
+                writer.write(langTypeName + " " + classname + ";\n");
+                writer.write("typedef " + langTypeName + "_Array " + classname + "_Array;\n");
+            
                 if (restrictionData.size() > 1)
                 {
                     //there are enumerations or min/maxInclusive
                     boolean isEnum = false;
-                    boolean hasRestrictionItems = false;
+
                     for (int i = 1; i < restrictionData.size(); i++)
                     {
                         QName value = (QName) restrictionData.elementAt(i);
@@ -196,7 +204,7 @@
                             if (i > 1)
                                 writer.write(", ");
                             else
-                                writer.write(" enum { ");
+                                writer.write("typedef enum { ");
 
                             writer.write("ENUM" + classname.toUpperCase() + "_"
                                     + value.getNamespaceURI() + "="
@@ -204,36 +212,25 @@
                         } 
                         else if ("minInclusive".equals(value.getLocalPart()))
                         {
-                            hasRestrictionItems = true;
-                            if (i <= 1)
-                                writer.write(langTypeName + " " + classname + ";\n");
-                            
                             writer.write("static const int " + classname
                                     + "_MinInclusive = " + value.getNamespaceURI() + ";\n");
                         } 
                         else if ("maxInclusive".equals(value.getLocalPart()))
                         {
-                            hasRestrictionItems = true;
-                            if (i <= 1)
-                                writer.write(langTypeName + " " + classname + ";\n");
-
                             writer.write("static const int " + classname
                                     + "_MaxInclusive = " + value.getNamespaceURI() + ";\n");
                         }
                     }
                     
                     if (isEnum)
-                        writer.write("} " + classname + ";\n");
-                    else if (!hasRestrictionItems)
-                        writer.write(langTypeName + " " + classname + ";\n");
+                        writer.write("} " + classname + "_Enum;\n");
                 } 
-                else
-                    writer.write(langTypeName + " " + classname + ";\n");
             } 
             else
             {
                 writer.write(langTypeName + " " + classname + ";\n");
-                writer.write("\n");
+                writer.write("typedef " + langTypeName + "_Array " + classname + "_Array;\n");
+                
                 for (int i = 1; i < restrictionData.size(); i++)
                 {
                     QName value = (QName) restrictionData.elementAt(i);
@@ -255,10 +252,6 @@
         }
     }
     
-    
-    /* (non-Javadoc)
-     * @see org.apache.axis.wsdl.wsdl2ws.BasicFileWriter#writeAttributes()
-     */
     protected void writeAttributes() throws WrapperFault
     {
         int anyCounter = 0;
@@ -466,13 +459,28 @@
             HashSet typeSet = new HashSet();
             for (int i = 0; i < attribs.length; i++)
             {
-                if ((attribs[i].isArray()) && 
-                        !(attribs[i].isSimpleType() || attribs[i].getType().isSimpleType()))
-                    typeSet.add(attribs[i].getTypeName() + "_Array");
+                String basicType = attribs[i].getTypeName();
+                Type theType = attribs[i].getType();
 
-                if (!(attribs[i].isSimpleType() || attribs[i].isAnyType()))
-                    typeSet.add(attribs[i].getTypeName());
+                if (theType.isRestriction() && !CUtils.isSimpleType(basicType))
+                    typeSet.add(basicType);
+                else if (!attribs[i].isSimpleType())
+                {
+                    if ((attribs[i].isArray()) && !theType.isSimpleType())
+                        typeSet.add(basicType + "_Array");
+    
+                    if (!attribs[i].isAnyType())
+                        typeSet.add(basicType);
+                }
             }
+            
+            if (extensionBaseAttrib != null 
+                    && getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib) != null)
+            {
+                String extBaseType = getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib);
+                if (!CUtils.isSimpleType(extBaseType))
+                    typeSet.add(extBaseType);
+            }            
             
             Iterator itr = typeSet.iterator();
             if (itr.hasNext())

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java Thu Dec 21 22:35:36 2006
@@ -20,10 +20,10 @@
  * @author Susantha Kumara(susantha@opensource.lk, skumara@virtusa.com)
  */
 package org.apache.axis.wsdl.wsdl2ws.c.literal;
+
 import java.io.IOException;
-import java.util.Iterator;
 import java.util.HashSet;
-import java.util.Vector;
+import java.util.Iterator;
 
 import org.apache.axis.wsdl.wsdl2ws.CUtils;
 import org.apache.axis.wsdl.wsdl2ws.WrapperFault;
@@ -36,10 +36,6 @@
 public class ClientStubHeaderWriter
     extends org.apache.axis.wsdl.wsdl2ws.c.ClientStubHeaderWriter
 {
-    /**
-     * @param wscontext
-     * @throws WrapperFault
-     */
     public ClientStubHeaderWriter(WebServiceContext wscontext)
         throws WrapperFault
     {
@@ -179,9 +175,7 @@
         }
     }
 
-    /*
-     * (non-Javadoc)
-     * 
+    /* (non-Javadoc)
      * @see org.apache.axis.wsdl.wsdl2ws.cpp.HeaderFileWriter#writePreprocssorStatements()
      */
     protected void writePreprocessorStatements() throws WrapperFault
@@ -201,7 +195,7 @@
             
             Type atype;
             Iterator types = this.wscontext.getTypemap().getTypes().iterator();
-            Vector typeSet = new Vector();
+            HashSet typeSet = new HashSet();
             HashSet removeSet = new HashSet();
 
             while (types.hasNext())
@@ -218,6 +212,9 @@
                 if (atype.getBaseType() != null)
                     if (atype.getBaseType().getLocalPart().equals("string"))
                         removeSet.add(atype.getLanguageSpecificName() + "_Array");
+
+                if (atype.isRestriction())
+                    removeSet.add(atype.getLanguageSpecificName()  + "_Array");
 
                 typeSet.add(atype.getLanguageSpecificName());
             }

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java Thu Dec 21 22:35:36 2006
@@ -35,15 +35,12 @@
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.Vector;
 
 import javax.xml.namespace.QName;
 
 import org.apache.axis.wsdl.symbolTable.TypeEntry;
 import org.apache.axis.wsdl.wsdl2ws.CUtils;
-import org.apache.axis.wsdl.wsdl2ws.WrapperConstants;
 import org.apache.axis.wsdl.wsdl2ws.WrapperFault;
-import org.apache.axis.wsdl.wsdl2ws.info.AttributeInfo;
 import org.apache.axis.wsdl.wsdl2ws.info.Type;
 import org.apache.axis.wsdl.wsdl2ws.info.WebServiceContext;
 
@@ -101,7 +98,7 @@
         {
             for (int i = 0; i < attribs.length; i++)
             {
-                attribs[i].setParamName( CUtils.sanitiseAttributeName( classname, attribs[i].getParamName()));
+                attribs[i].setParamName( CUtils.sanitiseAttributeName(classname, attribs[i].getParamName()));
 
                 String methodName = attribs[i].getParamNameWithoutSymbols();
                 String parameterName = methodName;
@@ -260,25 +257,6 @@
                         methodName = methodName + Integer.toString(anyCounter);
                     }
 
-                    Type attributeType = attribs[i].getType();
-                    boolean isPointerType = false;
-                    
-                    if( attributeType.isRestriction())
-                    {
-                        // Find the base type of the restriction.
-                        attributeType = CUtils.findBaseTypeOfRestriction( attributeType, wscontext);
-                        
-                        String attributeTypeAsString = CUtils.getBaseTypeOfRestrictionAsString( attributeType); 
-                        
-                        if( CUtils.isPointerType( attributeTypeAsString))
-                        {
-                            int pointerOffset = properParamName.indexOf("*");
-                            
-                            if( pointerOffset > 0)
-                                properParamName = properParamName.substring( 0, pointerOffset);
-                        }
-                    }
-                        
                     writer.write("\n"
                             + properParamName + " " + classname + "::get" + methodName
                             + "()\n{\n");
@@ -293,15 +271,16 @@
                             + "void " + classname + "::set"
                             + methodName + "(" + properParamName + " InValue");
                     
-                    isPointerType = false;
+                    Type attributeType = attribs[i].getType();
                     
+                    boolean isPointerType = false;
                     if (attributeType.isSimpleType())
                         isPointerType = CUtils.isPointerType(CUtils.getclass4qname(attributeType.getBaseType())); 
                     else
                         isPointerType = CUtils.isPointerType(getCorrectParmNameConsideringArraysAndComplexTypes(attribs[i]));
                     
-                    if((attribs[i].isSimpleType() || attributeType.isSimpleType()) &&
-                       (isPointerType || attribs[i].getAllElement() || attribs[i].getChoiceElement()))
+                    if((attribs[i].isSimpleType() || attribs[i].getType().isSimpleType()) 
+                            && (isPointerType || attribs[i].getAllElement() || attribs[i].getChoiceElement()))
                         writer.write(", bool deep");
                     
                     writer.write(")\n{\n");
@@ -452,119 +431,36 @@
         writer.write( "\t}\n\n");
         
         writer.write("\t/* If there are any attributes serialize them. If there aren't then close the tag */\n");
-        // vvv FJP - 17667
         for (int i = 0; i < attributeParamCount; i++)
         {
-            AttributeInfo ai = attribs[i];
-            Type          type = ai.getType();
-            boolean       repeat = false;
-            int           countdown = 5;
-            
-            do
+            if (attribs[i].isArray() || !(attribs[i].isSimpleType() || attribs[i].getType().isSimpleType()))
             {
-                repeat = false;
-                
-                if( type.isRestriction())
-                {
-                    writer.write("\t// A restricted type (base=" + type.getRestrictionBase() + ") has been found.  The following restrictions need to be applied:-\n");
-    
-                    Vector vre = type.getRestrictionEnumeration();
-                    Vector vrp = type.getRestrictionPattern();
-    
-                    if( vre != null)
-                    {
-                        writer.write("\t//\t Enumeration:\n");
-                        
-                        for( int j = 0; j < vre.size(); j++)
-                            writer.write("\t//\t\t " + vre.get( j) + "\n");
+                throw new WrapperFault("Error : an attribute is not basic type");
             }
-                    
-                    if( vrp != null)
-                    {
-                        writer.write("\t//\t Pattern:\n");
-                        
-                        for( int j = 0; j < vrp.size(); j++)
-                            writer.write("\t//\t\t " + vrp.get( j) + "\n");
-                    }
-                
-                    // Locate base type for restricted type
-                    String base = type.getRestrictionBase();
-                    String baseType = null;
-                    
-                    base = base.substring( base.indexOf( ":") + 1);
-                    baseType = CUtils.getclass4qname( new QName( WrapperConstants.SCHEMA_NAMESPACE, base));
-                    
-                    if( baseType == null)
-                    {
-                        Iterator itmt = wscontext.getTypemap().getTypes().iterator();
-                    
-                        while( itmt.hasNext())
-                        {
-                            Type t = (Type) itmt.next();
-                            
-                            if( t.getName().getLocalPart().equals( base))
-                            {
-                                type = t;
-                                repeat = true;
-                                countdown--;
-                                break;
-                            }
-                        }
-                    }
             else
             {
-                        baseType = baseType.substring( baseType.lastIndexOf( "_") + 1);
-                        
-                        type.setBaseType( new QName( WrapperConstants.SCHEMA_NAMESPACE, baseType));
-                        
-                        ai.setType( type);
-                    }
-                }
-            
-                if ((ai.isArray() || !(ai.isSimpleType() || ai.getType().isSimpleType())) && !repeat)
-                {
-                        throw new WrapperFault("Error : an attribute is not basic type");
-                }
-
-            } while( repeat && countdown > 0);
-            // ^^^ FJP - 17667
-            
-            //Samisa
                 //remove _Ref sufix and _ prefix in SOAP tag name
-            String soapTagName = ai.getParamName();
+                String soapTagName = attribs[i].getParamName();
                 if (soapTagName.lastIndexOf("_Ref") > -1)
                     soapTagName = soapTagName.substring(0, soapTagName.lastIndexOf("_Ref"));
                 
                 if (soapTagName.charAt(0) == '_')
                     soapTagName = soapTagName.substring(1, soapTagName.length());
 
-            //end remove _Ref sufix and _ prefix in SOAP tag name
-            boolean isPointerType = false;
+                Type type = attribs[i].getType();
                 String basicType = null;
                 
-            if (!ai.isSimpleType() && type.isSimpleType())
-            {
+                if (!attribs[i].isSimpleType() && type.isSimpleType())
                     basicType = CUtils.getclass4qname(type.getBaseType());
-
-                String    class4QName = CUtils.getclass4qname(type.getBaseType());
-                
-                isPointerType = CUtils.isPointerType( class4QName); 
-            }
                 else
+                    basicType = attribs[i].getTypeName();
+
+                if (CUtils.isPointerType(basicType))
                 {
-                basicType = ai.getTypeName();
-                isPointerType = CUtils.isPointerType(ai.getTypeName());
-                }
-                
-            if (isPointerType)
-                {
-                writer.write("\tif (0 != param->"
-                        + ai.getParamNameAsMember() + ")\n");
+                    writer.write("\tif (0 != param->" + attribs[i].getParamNameAsMember() + ")\n");
                     writer.write("\t\tpSZ->serializeAsAttribute(\""
-                        + soapTagName
-                        + "\", 0, (void*)(param->"
-                        + ai.getParamNameAsMember()
-                        + "), "
+                            + soapTagName + "\", 0, (void*)(param->"
+                            + attribs[i].getParamNameAsMember() + "), "
                             + CUtils.getXSDTypeForBasicType(basicType) + ");\n");
                 }
                 else
@@ -576,18 +472,8 @@
                             + "), "
                             + CUtils.getXSDTypeForBasicType(attribs[i].getTypeName()) + ");\n");
                 }
-                
-                if (!attribs[i].isOptional())
-                {
-                    /* This avoid segmentation fault at runtime */
-                    /*
-                     * writer.write("\telse\n");
-                     * writer.write("\t\tAXISTRACE1(\"The mandatory attribute
-                     * "+attribs[i].getParamName()+" is not set\",
-                     * CRITICAL);\n");
-                     */
-                }
             }
+        }
         
         if (type.isFault())
         {
@@ -961,7 +847,7 @@
             else if (attribs[i].isArray())
             {
                 arrayCount++;
-                //if Array
+                
                 if (attribs[i].isSimpleType() || attribs[i].getType().isSimpleType())
                 {
                     String baseTypeName = null;
@@ -1520,7 +1406,7 @@
         {            
             writer.write("int Check_Restrictions_" + classname + "(" + classname + " value)\n");
             
-            //TODO write code to check the restrictions.  FJP - Begun, but untested.
+            //TODO write code to check the restrictions. 
             
             writer.write("{\n");
             

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubHeaderWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubHeaderWriter.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubHeaderWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubHeaderWriter.java Thu Dec 21 22:35:36 2006
@@ -192,6 +192,8 @@
 
     /* (non-Javadoc)
      * @see org.apache.axis.wsdl.wsdl2ws.cpp.HeaderFileWriter#writePreprocssorStatements()
+     * TODO: Not sure why this method should not be the same as the one in literal/ directory - 
+     *       that is, move the one in literal dir here and remove it from literal/ClientStubHeaderWriter.java
      */
     protected void writePreprocessorStatements() throws WrapperFault
     {
@@ -201,10 +203,14 @@
             writer.write("#include <axis/OtherFaultException.hpp>\n");
             writer.write("#include <axis/ISoapAttachment.hpp>\n");
             writer.write("#include <axis/ISoapFault.hpp>\n");
+            writer.write("\n");
             writer.write("AXIS_CPP_NAMESPACE_USE\n");
+            writer.write("\n");
+            
             Type atype;
             Iterator types = this.wscontext.getTypemap().getTypes().iterator();
             HashSet typeSet = new HashSet();
+            HashSet removeSet = new HashSet();
             String typeName = null;
             
             while (types.hasNext())
@@ -216,7 +222,14 @@
                 typeName = WrapperUtils.getLanguageTypeName4Type(atype);
                 if (null != typeName)
                     typeSet.add(typeName);
+          
+                if (atype.isRestriction())
+                    removeSet.add(atype.getLanguageSpecificName()  + "_Array");                
             }
+            
+            Iterator ritr = removeSet.iterator();
+            while (ritr.hasNext())
+                typeSet.remove(ritr.next());
             
             Iterator itr = typeSet.iterator();
             while (itr.hasNext())

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java Thu Dec 21 22:35:36 2006
@@ -294,11 +294,21 @@
 
                 writer.write("\tRet = NULL;\n");
             }
-            else if ("xsd__base64Binary".equals(outparamTypeName) 
-                        || "xsd__hexBinary".equals(outparamTypeName))
-                writer.write(outparamTypeName + "\tRet;\n");
             else
-                writer.write(outparamTypeName + "\tRet = " + CUtils.getInitValue(outparamTypeName) + ";\n");
+            {
+                String initValue = CUtils.getInitValue (outparamTypeName);
+                if (initValue != null)
+                    writer.write (outparamTypeName + " Ret = " + initValue + ";\n");
+                else if (outparamTypeName.equals ("xsd__dateTime")
+                            || outparamTypeName.equals ("xsd__date")
+                            || outparamTypeName.equals ("xsd__time"))
+                {
+                    writer.write (outparamTypeName + " Ret;\n");
+                    writer.write ("\tmemset(&Ret,0,sizeof(" + outparamTypeName + "));\n");
+                }
+                else
+                    writer.write (outparamTypeName + " Ret;\n");
+            }
         }
 
         //writer.write("\tchar* cFaultcode;\n");

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParamCPPFileWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParamCPPFileWriter.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParamCPPFileWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParamCPPFileWriter.java Thu Dec 21 22:35:36 2006
@@ -60,10 +60,6 @@
             
             if (type.isSimpleType())
                 writeRestrictionCheckerFunction();
-            else if( type.isRestriction())    // vvv FJP - 17667
-            {
-                writer.write( "\n// Type consists of purely 'restriction' information.\n// Currently no code has been written, but some may be required to check the restriction.\n\n");
-            } // ^^^ FJP - 17667              
             else
             {
                 writeGlobalCodes();

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java Thu Dec 21 22:35:36 2006
@@ -62,53 +62,20 @@
                     + getFileType().toUpperCase() + "_H__INCLUDED_\n\n");
 
             if (type.isSimpleType())
-            {
-                writeSimpleTypeWithEnumerations();
-            }
+                writeSimpleTypeWithRestrictions();
             else
-                {
-                classname = CUtils.sanitiseClassName( classname);
-
-                // vvv FJP - 17667
-                // Check that type is not a restriction
-                if( type.isRestriction())
-                {
-                    String	baseType = type.getRestrictionBase();
-
-                    baseType = baseType.substring( baseType.indexOf( ":") + 1);
-                    writer.write( "#include \"" + baseType + ".hpp\"\n\n");
-                    writer.write( "// " + classname + " is a restricted type (base=" + baseType + ").\n// The following restrictions need to be applied:-\n");
-
-                    Vector vre = type.getRestrictionEnumeration();
-                    Vector vrp = type.getRestrictionPattern();
-
-                    if( vre != null)
-                    {
-                        writer.write("//\t Enumeration:\n");
-                        
-                        for( int j = 0; j < vre.size(); j++)
-                        {
-                            writer.write("//\t\t " + vre.get( j) + "\n");
-                        }
-                    }
-                    
-                    if( vrp != null)
-                    {
-                        writer.write("//\t Pattern:\n");
-                        
-                        for( int j = 0; j < vrp.size(); j++)
-                        {
-                            writer.write("//\t\t " + vrp.get( j) + "\n");
-                        }
-                    }
-                    
-                    writer.write( "\ntypedef " + baseType + " " + classname + ";\n\n");                    
-                }
-                // ^^^ FJP - 17667
-                else
             {
                 writePreprocessorStatements();
 
+                writer.write("\n");
+                writer.write("/* ********************************************************************* */\n");
+                writer.write("/* --- Custom type                                                   --- */\n");
+                writer.write("/* ********************************************************************* */\n");
+                writer.write("\n");                
+                
+                
+                classname = CUtils.sanitiseClassName( classname);
+                
                 this.writer.write("class STORAGE_CLASS_INFO " + classname);
                 if (this.type.isFault())
                     this.writer.write(" : public SoapFaultException");
@@ -122,8 +89,7 @@
                 
                 writeFunctionPrototypes();
             }
-            }
-            
+            this.writer.write("\n");
             this.writer.write("#endif /* !defined(__" + classname.toUpperCase()
                     + "_" + getFileType().toUpperCase() + "_H__INCLUDED_)*/\n");
             writer.flush();
@@ -159,21 +125,11 @@
                 
                 if (type.isSimpleType())
                     isPointerType = CUtils.isPointerType(CUtils.getclass4qname(type.getBaseType())); 
-				else if( type.isRestriction()) // vvv FJP - 17667
-			    {
-			        // Find base type of the restricted type.
-			        type = CUtils.findBaseTypeOfRestriction( type, wscontext);
-			        String restBaseClass = CUtils.getBaseTypeOfRestrictionAsString( type);
-
-			        if( type == null)
-			            System.out.println( "Warning - Could not find root base class of " + type.getName().getLocalPart());
-			        else if( restBaseClass != null)
-				        isPointerType = CUtils.isPointerType( restBaseClass);
-			    } // ^^^ FJP - 17667
                 else
                     isPointerType = CUtils.isPointerType(getCorrectParmNameConsideringArraysAndComplexTypes(attribs[i]));
 
-        	    if ((attribs[i].isSimpleType() || type.isSimpleType())
+                if ((attribs[i].isSimpleType() 
+                        || attribs[i].getType().isSimpleType()) 
                         && !attribs[i].isArray() 
                         && (isElementNillable(i) 
                                 || isElementOptional(i) 
@@ -196,14 +152,13 @@
         }
     }
 
-    protected void writeSimpleTypeWithEnumerations() throws WrapperFault
+    protected void writeSimpleTypeWithRestrictions() throws WrapperFault
     {
         try
         {
             writer.write("#include <axis/AxisUserAPI.hpp>\n");
             writer.write("#include <axis/AxisUserAPIArrays.hpp>\n");
-            writer.write("AXIS_CPP_NAMESPACE_USE \n\n");
-
+            
             Vector restrictionData = type.getEnumerationdata();
             if (restrictionData == null)
                 return;
@@ -211,11 +166,26 @@
             TypeEntry baseEType = (TypeEntry) restrictionData.firstElement();
             QName baseType = baseEType.getQName();
             if (!CUtils.isSimpleType(baseType))
-                return;
+                return;   
+            
+            String baseTypeName = CUtils.getclass4qname(baseType);
+            String langTypeName;
+            
+            // User defined simple type based on another user-defined simple type
+            String  restrictionBaseType = type.getRestrictionBaseType();
+            if (null != restrictionBaseType )
+            {  
+                langTypeName = CUtils.sanitiseClassName(restrictionBaseType);               
+                writer.write( "#include \"" + langTypeName + ".hpp\"\n\n");
+            }
+            else
+                langTypeName = baseTypeName;
+            
+            writer.write("AXIS_CPP_NAMESPACE_USE \n\n");
 
             writer.write("\n");
             writer.write("/* ********************************************************************* */\n");
-            writer.write("/* --- Simple types and enumerations                                 --- */\n");
+            writer.write("/* --- Simple types and restrictions                                 --- */\n");
             writer.write("/* ********************************************************************* */\n");
             writer.write("\n");  
 
@@ -234,14 +204,14 @@
                     break;
             }            
             
-            String langTypeName = CUtils.getclass4qname(baseType);
             writer.write("typedef ");
-            if (CUtils.isPointerType(CUtils.getclass4qname(baseType)) 
-                    || "xsd__base64Binary".equals(CUtils.getclass4qname(baseType)) 
-                    || "xsd__hexBinary".equals(CUtils.getclass4qname(baseType)))
+            if (CUtils.isPointerType(baseTypeName) 
+                    || "xsd__base64Binary".equals(baseTypeName) 
+                    || "xsd__hexBinary".equals(baseTypeName))
             {
                 writer.write(langTypeName + " " + classname + ";\n");
                 writer.write("typedef " + langTypeName + "_Array " + classname + "_Array;\n");
+                writer.write("\n");
                 
                 for (int i = 1; i < restrictionData.size(); i++)
                 {
@@ -269,11 +239,14 @@
             } 
             else if ("int".equals(baseType.getLocalPart()))
             {
+                writer.write(langTypeName + " " + classname + ";\n");
+                writer.write("typedef " + langTypeName + "_Array " + classname + "_Array;\n");
+            
                 if (restrictionData.size() > 1)
                 {
                     //there are enumerations or min/maxInclusive
                     boolean isEnum = false;
-                    boolean hasRestrictionItems = false;
+
                     for (int i = 1; i < restrictionData.size(); i++)
                     {
                         QName value = (QName) restrictionData.elementAt(i);
@@ -283,7 +256,7 @@
                             if (i > 1)
                                 writer.write(", ");
                             else
-                                writer.write(" enum { ");
+                                writer.write("typedef enum { ");
 
                             writer.write("ENUM" + classname.toUpperCase() + "_"
                                     + value.getNamespaceURI() + "="
@@ -291,35 +264,25 @@
                         } 
                         else if ("minInclusive".equals(value.getLocalPart()))
                         {
-                            hasRestrictionItems = true;
-                            if (i <= 1)
-                                writer.write(langTypeName + " " + classname + ";\n");
-                            
                             writer.write("static const int " + classname
                                     + "_MinInclusive = " + value.getNamespaceURI() + ";\n");
                         } 
                         else if ("maxInclusive".equals(value.getLocalPart()))
                         {
-                            hasRestrictionItems = true;
-                            if (i <= 1)
-                                writer.write(langTypeName + " " + classname + ";\n");
-
                             writer.write("static const int " + classname
                                     + "_MaxInclusive = " + value.getNamespaceURI() + ";\n");
                         }
                     }
                     
                     if (isEnum)
-                        writer.write("} " + classname + ";\n");
-                    else if (!hasRestrictionItems)
-                        writer.write(langTypeName + " " + classname + ";\n");
+                        writer.write("} " + classname + "_Enum;\n");
                 } 
-                else
-                    writer.write(langTypeName + " " + classname + ";\n");
             } 
             else
             {
                 writer.write(langTypeName + " " + classname + ";\n");
+                writer.write("typedef " + langTypeName + "_Array " + classname + "_Array;\n");
+                
                 for (int i = 1; i < restrictionData.size(); i++)
                 {
                     QName value = (QName) restrictionData.elementAt(i);
@@ -353,7 +316,7 @@
             writer.write("public:\n");
             for (int i = 0; i < attribs.length; i++)
             {
-                attribs[i].setParamName( CUtils.sanitiseAttributeName( classname, attribs[i].getParamName()));
+                attribs[i].setParamName( CUtils.sanitiseAttributeName(classname, attribs[i].getParamName()));
                 
                 if (isElementNillable(i) 
                         || attribs[i].isArray() 
@@ -375,7 +338,8 @@
                         if (!paramName.endsWith("*"))
                             paramName += " *";
                         
-                        if (!attribs[i].isSimpleType() && attribs[i].getType().isSimpleType())
+                        if ((!attribs[i].isSimpleType() && attribs[i].getType().isSimpleType()) 
+                                || attribs[i].getType().isRestriction())
                             writer.write("\t");
                         else
                             writer.write("\tclass ");
@@ -409,28 +373,7 @@
                             + Integer.toString(anyCounter)
                             + ";\n");
                 }
-				else
-				{
-			        // vvv FJP - 17667
-					if( attribs[i].getType().isRestriction())
-					{
-					    String  typeName = getCorrectParmNameConsideringArraysAndComplexTypes(attribs[i]);
-					    Type    baseType = CUtils.findBaseTypeOfRestriction( attribs[i].getType(), wscontext);
-					    boolean	isPointer = CUtils.isPointerType( CUtils.getBaseTypeOfRestrictionAsString( baseType));
                     
-					    if( isPointer)
-					    {
-					        int	pointerPos = typeName.indexOf( "*");
-					        
-					        if( pointerPos > 0)
-					        {
-					            typeName = typeName.substring( 0, pointerPos);
-					        }
-					    }
-					    
-					    writer.write( "\t" + typeName + " " + attribs[i].getParamNameWithoutSymbols() + ";\n");
-					}
-			        // ^^^ FJP - 17667
                 else
                 {
                     writer.write("\t"
@@ -439,7 +382,6 @@
                                 + ";\n");
                 }
             }
-            }
             
             if (extensionBaseAttrib != null &&
                 getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib) != null)
@@ -568,46 +510,25 @@
                 }
                 else 
                 {
-                    // vvv FJP - 17667
+                    writer.write("\n\t"
+                                + getCorrectParmNameConsideringArraysAndComplexTypes(attribs[i])
+                                + " get" + methodName + "();\n");
+
+                    writer.write("\t"
+                                + "void set" + methodName + "("
+                                + getCorrectParmNameConsideringArraysAndComplexTypes(attribs[i])
+                                + " InValue");
+                    
                     Type type = attribs[i].getType();
                     boolean isPointerType = false;
-                    String	typeName = getCorrectParmNameConsideringArraysAndComplexTypes( attribs[i]);
-                    
-                    // Check for restriction.  If found, then find base type.
-                    if( type.isRestriction())
-                    {
-                        type = CUtils.findBaseTypeOfRestriction( type, wscontext);
-                    }
                     
                     if (type.isSimpleType())
                         isPointerType = CUtils.isPointerType(CUtils.getclass4qname(type.getBaseType())); 
                     else
                         isPointerType = CUtils.isPointerType(getCorrectParmNameConsideringArraysAndComplexTypes(attribs[i]));
                     
-                    if( type.isRestriction() && isPointerType)
-                    {
-                        int pointerLocation = typeName.indexOf( "*");
-                        
-                        if( pointerLocation > 0)
-                        {
-                            typeName = typeName.substring( 0, pointerLocation);
-                        }
-                    }
-                    // ^^^ FJP - 17667
-
-                    
-                    writer.write("\n\t"
-                            + typeName
-                            + " get" + methodName + "();\n");
-
-                    writer.write("\t"
-                            + "void set" + methodName + "("
-                            + typeName
-                            + " InValue");
-                
-
                     if ( (attribs[i].getAllElement() || attribs[i].getChoiceElement() || isPointerType) 
-                         && (attribs[i].isSimpleType() || type.isSimpleType()))
+                         && (attribs[i].isSimpleType() || attribs[i].getType().isSimpleType()))
                         writer.write(", bool deep = true");
                     
                     writer.write(");\n");
@@ -708,7 +629,7 @@
             
             writer.write("extern int Axis_DeSerialize_" + typeName
                     + "(" + typeName + "* param, IWrapperSoapDeSerializer* pDZ);\n");
-            writer.write("extern void* Axis_Create_" + typeName + "(int nSize);\n");
+            writer.write("extern void* Axis_Create_" + typeName + "(int nSize=0);\n");
             writer.write("extern void Axis_Delete_" + typeName + "("
                     + typeName + "* param, int nSize=0);\n");
             writer.write("extern int Axis_Serialize_" + typeName + "("
@@ -739,6 +660,7 @@
             if (this.type.isFault())
             {
                 writer.write("#include <axis/SoapFaultException.hpp>\n");
+                writer.write("\n");
                 writer.write("using namespace std;\n");
             }
             
@@ -746,15 +668,33 @@
             HashSet typeSet = new HashSet();
             for (int i = 0; i < attribs.length; i++)
             {
-                if ((attribs[i].isArray()) && 
-                        !(attribs[i].isSimpleType() || attribs[i].getType().isSimpleType()))
-                    typeSet.add(attribs[i].getTypeName() + "_Array");
-
-                if (!(attribs[i].isSimpleType() || attribs[i].isAnyType()))
-                    typeSet.add(attribs[i].getTypeName());
+                String basicType = attribs[i].getTypeName();
+                Type theType = attribs[i].getType();
+                
+                if (theType.isRestriction() && !CUtils.isSimpleType(basicType))
+                    typeSet.add(basicType);
+                else if (!attribs[i].isSimpleType())
+                {
+                    if ((attribs[i].isArray()) && !theType.isSimpleType())
+                        typeSet.add(basicType + "_Array");
+    
+                    if (!attribs[i].isAnyType())
+                        typeSet.add(basicType);
+                }
             }
             
+            if (extensionBaseAttrib != null 
+                    && getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib) != null)
+            {
+                String extBaseType = getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib);
+                if (!CUtils.isSimpleType(extBaseType))
+                    typeSet.add(extBaseType);
+            }            
+            
             Iterator itr = typeSet.iterator();
+             if (itr.hasNext())
+                writer.write("\n"); 
+                
             while (itr.hasNext())
             {
                 // Do not want to include the header file we are generating!
@@ -777,12 +717,11 @@
             for (int i = 0; i < attribs.length; i++)
             {
                 if (!attribs[i].isArray() && 
-				    !(attribs[i].isSimpleType() || attribs[i].getType().isSimpleType()) &&
-					!attribs[i].isAnyType() &&
-					!attribs[i].getType().isRestriction())
+                        !(attribs[i].isSimpleType() || attribs[i].getType().isSimpleType())
+                        && !attribs[i].isAnyType())
 				{
                     typeSet.add(attribs[i].getTypeName());
-            }
+                } 
             }
             
             itr = typeSet.iterator();

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java Thu Dec 21 22:35:36 2006
@@ -399,10 +399,10 @@
             		else
             		{
             		    writer.write("\n\t" + paraTypeName + " v" + i);
-            		    if (!"xsd__base64Binary".equals(paraTypeName) && !"xsd__hexBinary".equals(paraTypeName) )
-            		    {
-            		        writer.write(" = " + CUtils.getInitValue(paraTypeName));
-            		    }
+                        String typeInitValue = CUtils.getInitValue(paraTypeName);
+            		    if (typeInitValue != null)
+            		        writer.write(" = " + typeInitValue);
+
             		    writer.write(";\n");
 	            		writer.write("\t"
 							+ paraTypeName

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java Thu Dec 21 22:35:36 2006
@@ -182,7 +182,10 @@
             writer.write("#include <axis/OtherFaultException.hpp>\n");
             writer.write("#include <axis/ISoapAttachment.hpp>\n");
             writer.write("#include <axis/ISoapFault.hpp>\n");
+            writer.write("\n");
             writer.write("AXIS_CPP_NAMESPACE_USE\n");
+            writer.write("\n");
+            
             Type atype;
             Iterator types = this.wscontext.getTypemap().getTypes().iterator();
             HashSet typeSet = new HashSet();
@@ -190,18 +193,22 @@
             while (types.hasNext())
             {
                 atype = (Type) types.next();
-                if(atype.isExternalized())
-                {
-                    if (atype.isArray())
-                        if (atype.getElementType().equals("string"))
-                            removeSet.add(atype.getLanguageSpecificName());
-                    
-                    if (atype.getBaseType() != null)
-                        if (atype.getBaseType().getLocalPart().equals("string"))
-                            removeSet.add(atype.getLanguageSpecificName() + "_Array");
+                
+                if (!atype.isExternalized())
+                    continue;
 
-                    typeSet.add(atype.getLanguageSpecificName());
-                }
+                if (atype.isArray())
+                    if (atype.getElementType().equals("string"))
+                        removeSet.add(atype.getLanguageSpecificName());
+                
+                if (atype.getBaseType() != null)
+                    if (atype.getBaseType().getLocalPart().equals("string"))
+                        removeSet.add(atype.getLanguageSpecificName() + "_Array");
+                
+                if (atype.isRestriction())
+                    removeSet.add(atype.getLanguageSpecificName()  + "_Array");
+
+                typeSet.add(atype.getLanguageSpecificName());
             }
             
             Iterator ritr = removeSet.iterator();

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java?view=diff&rev=489565&r1=489564&r2=489565
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java Thu Dec 21 22:35:36 2006
@@ -235,9 +235,9 @@
                 else
                 {
                     writer.write("\n\t" + paraTypeName + " v" + i);
-                    if (!"xsd__base64Binary".equals(paraTypeName) 
-                            && !"xsd__hexBinary".equals(paraTypeName))
-                        writer.write(" = " + CUtils.getInitValue(paraTypeName));
+                    String typeInitValue = CUtils.getInitValue(paraTypeName);
+                    if (typeInitValue != null)
+                        writer.write(" = " + typeInitValue);
 
                     writer.write(";\n");
                     writer.write("\t"



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