Minor, ensure we include types that we generate files for in client stub...
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WebServiceGeneratorImpl.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WebServiceGeneratorImpl.java
index 155e432..3277fa7 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WebServiceGeneratorImpl.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WebServiceGeneratorImpl.java
@@ -15,10 +15,6 @@
  *   limitations under the License.

  */

 

-/**

- * @author Srinath Perera(hemapani

- */

-

 package org.apache.axis.wsdl.wsdl2ws;

 

 import org.apache.axis.wsdl.wsdl2ws.info.WebServiceContext;

@@ -42,6 +38,9 @@
 

         if (WrapperConstants.LANGUAGE_CPP.equalsIgnoreCase(language))

         {

+            // Generate objects common to Client and Server - MUST BE FIRST THING DONE!

+            (new Generator(WrapperConstants.GENERATOR_PARAM_CPP_ALL,wscontext)).generate();

+            

             if (WrapperConstants.SERVER.equals(wscontext.getWrapperInfo().getTargetEngine()))

             {

                 // Generate Server objects

@@ -60,12 +59,12 @@
                 (new Generator(WrapperConstants.GENERATOR_CLIENT_STUB_CPP,wscontext)).generate();

                 (new Generator(WrapperConstants.GENERATOR_CLIENT_STUB_HPP,wscontext)).generate();

             }

-            

-            // Generate objects common to Client and Server

-            (new Generator(WrapperConstants.GENERATOR_PARAM_CPP_ALL,wscontext)).generate();

         }

         else if (WrapperConstants.LANGUAGE_C.equalsIgnoreCase(language))

         {

+            // Generate objects common to Client and Server - MUST BE FIRST THING DONE!

+            (new Generator(WrapperConstants.GENERATOR_PARAM_C_ALL,wscontext)).generate();

+            

             if (WrapperConstants.SERVER.equals(wscontext.getWrapperInfo().getTargetEngine()))

             {

                 // Generate Server objects

@@ -83,8 +82,6 @@
                 (new Generator(WrapperConstants.GENERATOR_CLIENT_STUB_H,wscontext)).generate();

 

             }

-            // Generate objects common to Client and Server

-            (new Generator(WrapperConstants.GENERATOR_PARAM_C_ALL,wscontext)).generate();

         }

         else

         {

diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java
index 92bbd16..ca065bb 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java
@@ -17,15 +17,19 @@
 
 package org.apache.axis.wsdl.wsdl2ws.c.literal;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Iterator;
 
+import javax.xml.namespace.QName;
+
 import org.apache.axis.wsdl.wsdl2ws.CUtils;
 import org.apache.axis.wsdl.wsdl2ws.WrapperFault;
 import org.apache.axis.wsdl.wsdl2ws.info.MethodInfo;
 import org.apache.axis.wsdl.wsdl2ws.info.ParameterInfo;
 import org.apache.axis.wsdl.wsdl2ws.info.Type;
+import org.apache.axis.wsdl.wsdl2ws.info.TypeMap;
 import org.apache.axis.wsdl.wsdl2ws.info.WebServiceContext;
 
 public class ClientStubHeaderWriter
@@ -207,9 +211,29 @@
                     continue;
 
                 if (atype.isArray())
+                {
+                    // TODO not sure about "string" check, whether it is needed....
                     if (atype.getElementType().equals("string"))
                         removeSet.add(atype.getLanguageSpecificName());
+
+                    // NOTE: There is similar check in AllParamWriter.java.
+                        
+                    String elementType = atype.getElementType();
+                    if (elementType != null)
+                    {
+                        if (TypeMap.isAnonymousType(elementType))
+                            elementType = CUtils.sanitizeString(elementType);
+                        
+                        QName elementQname = new QName(atype.getName().getNamespaceURI(), elementType);                       
+                        Type currentType = wscontext.getTypemap().getType(elementQname);
+                        
+                        if (currentType != null)
+                            if ( currentType.isSimpleType())
+                                continue;
+                    }
+                }
                 
+                // TODO not sure about "string" check, whether it is needed....
                 if (atype.getBaseType() != null)
                     if (atype.getBaseType().getLocalPart().equals("string"))
                         removeSet.add(CUtils.getArrayNameForType(atype.getLanguageSpecificName()));
@@ -225,9 +249,17 @@
                 typeSet.remove(ritr.next());
             
             Iterator itr = typeSet.iterator();
+            String targetLocation = wscontext.getWrapperInfo().getTargetOutputLocation();
+            if (!targetLocation.endsWith(File.separator))
+                targetLocation += File.separator;
+          
             while (itr.hasNext())
             {
-                c_writer.write("#include \"" + itr.next().toString() + CUtils.getHeaderFileExtension() + "\"\n");
+                String fn = itr.next().toString() + CUtils.getHeaderFileExtension();
+                
+                // Not pretty but it works...this ensures we include generated types.
+                if (new File(targetLocation  + fn).exists())
+                    c_writer.write("#include \"" + fn + "\"\n");
             }
             c_writer.write("\n");
         }
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java
index e76cebf..ed29cba 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java
@@ -17,15 +17,20 @@
 
 package org.apache.axis.wsdl.wsdl2ws.cpp.literal;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Iterator;
 
+import javax.xml.namespace.QName;
+
 import org.apache.axis.wsdl.wsdl2ws.CUtils;
+import org.apache.axis.wsdl.wsdl2ws.WSDL2Ws;
 import org.apache.axis.wsdl.wsdl2ws.WrapperFault;
 import org.apache.axis.wsdl.wsdl2ws.info.MethodInfo;
 import org.apache.axis.wsdl.wsdl2ws.info.ParameterInfo;
 import org.apache.axis.wsdl.wsdl2ws.info.Type;
+import org.apache.axis.wsdl.wsdl2ws.info.TypeMap;
 import org.apache.axis.wsdl.wsdl2ws.info.WebServiceContext;
 
 public class ClientStubHeaderWriter
@@ -173,6 +178,7 @@
             c_writer.write("AXIS_CPP_NAMESPACE_USE\n");
             c_writer.write("\n");
             
+            // TODO - There should be a better way to determine what types are being generated!
             Type atype;
             Iterator types = this.wscontext.getTypemap().getTypes().iterator();
             HashSet typeSet = new HashSet();
@@ -185,13 +191,33 @@
                     continue;
 
                 if (atype.isArray())
+                {
+                    // TODO not sure about "string" check, whether it is needed....
                     if (atype.getElementType().equals("string"))
                         removeSet.add(atype.getLanguageSpecificName());
+
+                    // NOTE: There is similar check in AllParamWriter.java.  
+                    String elementType = atype.getElementType();
+                    if (elementType != null)
+                    {
+                        if (TypeMap.isAnonymousType(elementType))
+                            elementType = CUtils.sanitizeString(elementType);
+                        
+                        QName elementQname = new QName(atype.getName().getNamespaceURI(), elementType);                       
+                        Type currentType = wscontext.getTypemap().getType(elementQname);
+                        
+                        if (currentType != null)
+                            if ( currentType.isSimpleType())
+                                continue;
+                    }
+                }
                 
+                // TODO not sure about "string" check, whther it is needed...
                 if (atype.getBaseType() != null)
                     if (atype.getBaseType().getLocalPart().equals("string"))
                         removeSet.add(CUtils.getArrayNameForType(atype.getLanguageSpecificName()));
                 
+                   
                 if (atype.isRestriction())
                     removeSet.add(CUtils.getArrayNameForType(atype.getLanguageSpecificName()));
 
@@ -203,9 +229,17 @@
                 typeSet.remove(ritr.next());
 
             Iterator itr = typeSet.iterator();
+            String targetLocation = wscontext.getWrapperInfo().getTargetOutputLocation();
+            if (!targetLocation.endsWith(File.separator))
+                targetLocation += File.separator;
+          
             while (itr.hasNext())
             {
-                c_writer.write("#include \"" + itr.next().toString() + CUtils.getHeaderFileExtension() + "\"\n");
+                String fn = itr.next().toString() + CUtils.getHeaderFileExtension();
+                        
+                // Not pretty but it works...this ensures we include generated types.
+                if (new File(targetLocation  + fn).exists())
+                    c_writer.write("#include \"" + fn + "\"\n");
             }
             
             //    Method to print the Fault Exception headers