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