You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by su...@apache.org on 2004/03/18 08:50:45 UTC
cvs commit: ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal ArrayParamWriter.java BeanParamWriter.java ClientStubWriter.java ParamCFileWriter.java ParmHeaderFileWriter.java WrapWriter.java
susantha 2004/03/17 23:50:45
Modified: c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal
ArrayParamWriter.java BeanParamWriter.java
ClientStubWriter.java ParamCFileWriter.java
ParmHeaderFileWriter.java WrapWriter.java
Log:
WSDLWs improvements to generated C code when there are schema defined
simpleTypes with enumerations (enumeration checking functions yet to be done).
Revision Changes Path
1.4 +1 -5 ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ArrayParamWriter.java
Index: ArrayParamWriter.java
===================================================================
RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ArrayParamWriter.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ArrayParamWriter.java 15 Jan 2004 13:45:23 -0000 1.3
+++ ArrayParamWriter.java 18 Mar 2004 07:50:45 -0000 1.4
@@ -119,11 +119,7 @@
protected void writeArrayStruct()throws WrapperFault{
try{
writer.write("typedef struct "+classname+"Tag\n{\n");
- if(attribs[0].isSimpleType()){
- throw new WrapperFault("Error : no need to synthesis arrays for simple types");
- }else{
- writer.write("\t"+attribs[0].getTypeName()+"* m_Array;\n\tint m_Size;\n} "+classname+";\n\n");
- }
+ writer.write("\t"+attribs[0].getTypeName()+"* m_Array;\n\tint m_Size;\n} "+classname+";\n\n");
} catch (IOException e) {
throw new WrapperFault(e);
}
1.12 +10 -0 ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/BeanParamWriter.java
Index: BeanParamWriter.java
===================================================================
RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/BeanParamWriter.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- BeanParamWriter.java 8 Mar 2004 05:43:46 -0000 1.11
+++ BeanParamWriter.java 18 Mar 2004 07:50:45 -0000 1.12
@@ -342,4 +342,14 @@
writer.write("\t}\n");
writer.write("}\n");
}
+ protected void writeRestrictionCheckerFunction() throws WrapperFault {
+ try{
+ writer.write("int Check_Restrictions_"+classname+"("+classname+" value)\n");
+ writer.write("{\n");
+ //TODO write code to check the restrictions
+ writer.write("}\n");
+ }catch(IOException e){
+ throw new WrapperFault(e);
+ }
+ }
}
1.12 +18 -7 ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
Index: ClientStubWriter.java
===================================================================
RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- ClientStubWriter.java 19 Feb 2004 10:27:53 -0000 1.11
+++ ClientStubWriter.java 18 Mar 2004 07:50:45 -0000 1.12
@@ -247,7 +247,12 @@
for (int i = 0; i < paramsB.size(); i++) {
type = wscontext.getTypemap().getType(((ParameterInfo)paramsB.get(i)).getSchemaName());
if (type != null){
- paramTypeName = type.getLanguageSpecificName();
+ if (type.isSimpleType()){//schema defined simpleType possibly with restrictions
+ paramTypeName = CUtils.getclass4qname(type.getBaseType());
+ }
+ else{
+ paramTypeName = type.getLanguageSpecificName();
+ }
typeisarray = type.isArray();
}
else {
@@ -262,21 +267,21 @@
if (CUtils.isSimpleType(qname)){
containedType = CUtils.getclass4qname(qname);
writer.write("\tpCall->_functions->AddBasicArrayParameter(pCall->_object, ");
- writer.write("(Axis_Array*)(&Value"+i+"), "+CUtils.getXSDTypeForBasicType(containedType)+", \""+((ParameterInfo)paramsB.get(i)).getParamName()+"\"");
+ writer.write("(Axis_Array*)(&Value"+i+"), "+CUtils.getXSDTypeForBasicType(containedType)+", \""+((ParameterInfo)paramsB.get(i)).getElementName().getLocalPart()+"\"");
}
else{
containedType = qname.getLocalPart();
writer.write("\tpCall->_functions->AddCmplxArrayParameter(pCall->_object, ");
- writer.write("(Axis_Array*)(&Value"+i+"), (void*)Axis_Serialize_"+containedType+", (void*)Axis_Delete_"+containedType+", (void*) Axis_GetSize_"+containedType+", \""+((ParameterInfo)paramsB.get(i)).getParamName()+"\", Axis_URI_"+containedType);
+ writer.write("(Axis_Array*)(&Value"+i+"), (void*)Axis_Serialize_"+containedType+", (void*)Axis_Delete_"+containedType+", (void*) Axis_GetSize_"+containedType+", \""+((ParameterInfo)paramsB.get(i)).getElementName().getLocalPart()+"\", Axis_URI_"+containedType);
}
}else if(typeissimple){
//for simple types
writer.write("\tpCall->_functions->AddParameter(pCall->_object, ");
- writer.write("(void*)&Value"+i+", \"" + ((ParameterInfo)paramsB.get(i)).getParamName()+"\", "+CUtils.getXSDTypeForBasicType(paramTypeName));
+ writer.write("(void*)&Value"+i+", \"" + ((ParameterInfo)paramsB.get(i)).getElementName().getLocalPart()+"\", "+CUtils.getXSDTypeForBasicType(paramTypeName));
}else{
//for complex types
writer.write("\tpCall->_functions->AddCmplxParameter(pCall->_object, ");
- writer.write("Value"+i+", (void*)Axis_Serialize_"+paramTypeName+", (void*)Axis_Delete_"+paramTypeName+", \"" + ((ParameterInfo)paramsB.get(i)).getParamName()+"\", Axis_URI_"+paramTypeName);
+ writer.write("Value"+i+", (void*)Axis_Serialize_"+paramTypeName+", (void*)Axis_Delete_"+paramTypeName+", \"" + ((ParameterInfo)paramsB.get(i)).getElementName().getLocalPart()+"\", Axis_URI_"+paramTypeName);
}
writer.write(");\n");
}
@@ -289,7 +294,12 @@
ParameterInfo currentType = (ParameterInfo)paramsC.get(i);
type = wscontext.getTypemap().getType(currentType.getSchemaName());
if (type != null){
- currentParaType = type.getLanguageSpecificName();
+ if (type.isSimpleType()){
+ currentParaType = CUtils.getclass4qname(type.getBaseType());
+ }
+ else{
+ currentParaType = type.getLanguageSpecificName();
+ }
typeisarray = type.isArray();
}
else {
@@ -349,7 +359,7 @@
writer.write("\treturn RetArray;\n");
}
else if(returntypeissimple){
- writer.write("\t\t\tRet = pCall->_functions->"+ CUtils.getParameterGetValueMethodName(outparamType, false)+"(pCall->_object, \""+ returntype.getParamName()+"\", 0);\n");
+ writer.write("\t\t\tRet = pCall->_functions->"+ CUtils.getParameterGetValueMethodName(outparamType, false)+"(pCall->_object, \""+ returntype.getElementName().getLocalPart()+"\", 0);\n");
writer.write("\t\t}\n");
writer.write("\t}\n\tpCall->_functions->UnInitialize(pCall->_object);\n");
writer.write("\treturn Ret;\n");
@@ -375,6 +385,7 @@
try {
while(types.hasNext()){
type = (Type)types.next();
+ if (type.isSimpleType()) continue;
if (type.isArray()) continue;
typeName = type.getLanguageSpecificName();
if (typeName.startsWith(">")) continue;
1.5 +9 -3 ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ParamCFileWriter.java
Index: ParamCFileWriter.java
===================================================================
RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ParamCFileWriter.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ParamCFileWriter.java 17 Jan 2004 12:25:31 -0000 1.4
+++ ParamCFileWriter.java 18 Mar 2004 07:50:45 -0000 1.5
@@ -74,15 +74,21 @@
public ParamCFileWriter(WebServiceContext wscontext,Type type)throws WrapperFault{
super(wscontext,type);
}
+ protected abstract void writeRestrictionCheckerFunction() throws WrapperFault;
public void writeSource()throws WrapperFault{
try{
this.writer = new BufferedWriter(new FileWriter(getFilePath(), false));
writeClassComment();
writePreprocssorStatements();
- writeGlobalCodes();
- writeAttributes();
- writeMethods();
+ if (type.isSimpleType()){
+ writeRestrictionCheckerFunction();
+ }
+ else{
+ writeGlobalCodes();
+ writeAttributes();
+ writeMethods();
+ }
//cleanup
writer.flush();
writer.close();
1.5 +64 -5 ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ParmHeaderFileWriter.java
Index: ParmHeaderFileWriter.java
===================================================================
RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ParmHeaderFileWriter.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ParmHeaderFileWriter.java 3 Feb 2004 13:04:48 -0000 1.4
+++ ParmHeaderFileWriter.java 18 Mar 2004 07:50:45 -0000 1.5
@@ -66,7 +66,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.WrapperFault;
import org.apache.axis.wsdl.wsdl2ws.ParamWriter;
import org.apache.axis.wsdl.wsdl2ws.WrapperUtils;
@@ -84,20 +89,74 @@
// if this headerfile not defined define it
this.writer.write("#if !defined(__"+classname.toUpperCase()+"_H__INCLUDED_)\n");
this.writer.write("#define __"+classname.toUpperCase()+"_H__INCLUDED_\n\n");
- writePreprocssorStatements();
- this.writer.write("typedef struct {\n");
- writeAttributes();
- this.writer.write("} "+classname+";\n\n");
+ if (type.isSimpleType()){
+ writeSimpleTypeWithEnumerations();
+ }
+ else{
+ writePreprocssorStatements();
+ this.writer.write("typedef struct {\n");
+ writeAttributes();
+ this.writer.write("} "+classname+";\n\n");
+ }
this.writer.write("#endif /* !defined(__"+classname.toUpperCase()+"_H__INCLUDED_)*/\n");
writer.flush();
writer.close();
System.out.println(getFilePath().getAbsolutePath() + " created.....");
- } catch (IOException e) {
+ } catch (IOException e){
e.printStackTrace();
throw new WrapperFault(e);
}
}
+ protected void writeSimpleTypeWithEnumerations() throws WrapperFault{
+ try{
+ Vector restrictionData = type.getEnumerationdata();
+ if ( restrictionData == null) return;
+ TypeEntry baseEType = (TypeEntry)restrictionData.firstElement();
+ QName baseType = baseEType.getQName();
+ if (!CUtils.isSimpleType(baseType)) return;
+ String langTypeName = CUtils.getclass4qname(baseType);
+ writer.write("typedef ");
+ if ("string".equals(baseType.getLocalPart())){
+ writer.write(langTypeName + " " + classname + ";\n");
+ for(int i=1; i<restrictionData.size();i++){
+ QName value = (QName)restrictionData.elementAt(i);
+ if ("enumeration".equals(value.getLocalPart())){
+ writer.write("const "+classname+" "+classname+"_"+value.getNamespaceURI()+" = \""+ value.getNamespaceURI()+"\";\n");
+ }else if("maxLength".equals(value.getLocalPart())){
+ writer.write("const "+classname+"_MaxLength = "+value.getNamespaceURI()+";\n");
+ }else if("minLength".equals(value.getLocalPart())){
+ writer.write("const "+classname+"_MinLength = "+value.getNamespaceURI()+";\n");
+ }
+ }
+ }
+ else if ("int".equals(baseType.getLocalPart())){
+ if (restrictionData.size()>1){ //there are enumerations
+ writer.write("enum { ");
+ for(int i=1; i<restrictionData.size();i++){
+ QName value = (QName)restrictionData.elementAt(i);
+ if ("enumeration".equals(value.getLocalPart())){
+ if (i>1) writer.write(", ");
+ writer.write("ENUM"+classname.toUpperCase()+"="+value.getNamespaceURI());
+ }
+ }
+ writer.write("} "+classname+";\n");
+ }
+ }
+ else{
+ writer.write(langTypeName + " " + classname + ";\n");
+ for(int i=1; i<restrictionData.size();i++){
+ QName value = (QName)restrictionData.elementAt(i);
+ if ("enumeration".equals(value.getLocalPart())){
+ writer.write("const "+classname+" "+classname+"_"+value.getNamespaceURI()+" = "+ value.getNamespaceURI()+";\n");
+ }
+ }
+ }
+ } catch (IOException e) {
+ throw new WrapperFault(e);
+ }
+ }
+
protected void writeAttributes()throws WrapperFault{
if(type.isArray()) return;
try{
1.12 +47 -18 ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/WrapWriter.java
Index: WrapWriter.java
===================================================================
RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/WrapWriter.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- WrapWriter.java 20 Feb 2004 13:37:44 -0000 1.11
+++ WrapWriter.java 18 Mar 2004 07:50:45 -0000 1.12
@@ -210,8 +210,6 @@
}
else{
isAllTreatedAsOutParams = true;
- //TODO make all outparams when there are more than one return params
- throw new WrapperFault("WSDL2Ws does not still handle more than one return parameters");
}
String methodName = minfo.getMethodname();
Collection params = minfo.getInputParameterTypes();
@@ -222,13 +220,20 @@
if (returntype != null){
retType = wscontext.getTypemap().getType(returntype.getSchemaName());
if (retType != null){
- outparamType = retType.getLanguageSpecificName();
- returntypeisarray = retType.isArray();
+ if (retType.isSimpleType()){ //schema defined simpleType possibly with restrictions
+ returntypeissimple = true;
+ outparamType = CUtils.getclass4qname(retType.getBaseType());
+ }
+ else{
+ outparamType = retType.getLanguageSpecificName();
+ returntypeisarray = retType.isArray();
+ returntypeissimple = CUtils.isSimpleType(outparamType);
+ }
}
else{
outparamType = returntype.getLangName();
+ returntypeissimple = CUtils.isSimpleType(outparamType);
}
- returntypeissimple = CUtils.isSimpleType(outparamType);
}
String paraTypeName;
ArrayList paramsB = new ArrayList(params);
@@ -245,11 +250,12 @@
for (int i = 0; i < paramsB.size(); i++) {
if (i>0) writer.write(",");
+ type = this.wscontext.getTypemap().getType(((ParameterInfo)paramsB.get(i)).getSchemaName());
paraTypeName = ((ParameterInfo)paramsB.get(i)).getLangName();
- if((CUtils.isSimpleType(paraTypeName))){
+ if((CUtils.isSimpleType(paraTypeName)) || (type != null && type.isSimpleType())){
//for simple types
writer.write(paraTypeName);
- }else if((type = this.wscontext.getTypemap().getType(((ParameterInfo)paramsB.get(i)).getSchemaName())) != null && type.isArray()){
+ }else if(type != null && type.isArray()){
writer.write(paraTypeName);
}else{
writer.write(paraTypeName+"*");
@@ -274,11 +280,12 @@
String elementName;
String returnParamName;
for (int i = 0; i < paramsB.size(); i++) {
+ type = this.wscontext.getTypemap().getType(((ParameterInfo)paramsB.get(i)).getSchemaName());
paraTypeName = ((ParameterInfo)paramsB.get(i)).getLangName();
- if((CUtils.isSimpleType(((ParameterInfo)paramsB.get(i)).getLangName()))){
+ if((CUtils.isSimpleType(paraTypeName)) || (type != null && type.isSimpleType())){
//for simple types
writer.write("\t"+paraTypeName+" v"+i+";\n");
- }else if((type = this.wscontext.getTypemap().getType(((ParameterInfo)paramsB.get(i)).getSchemaName())) != null && type.isArray()){
+ }else if(type != null && type.isArray()){
//for arrays
aretherearrayparams = true;
writer.write("\t"+paraTypeName+" v"+i+";\n");
@@ -305,18 +312,27 @@
writer.write("\tpSZ->_functions->CreateSoapMethod(SZ._object, \""+minfo.getOutputMessage().getLocalPart()+"\", \""+minfo.getOutputMessage().getNamespaceURI()+"\");\n");
//create and populate variables for each parameter
for (int i = 0; i < paramsB.size(); i++) {
- paraTypeName = ((ParameterInfo)paramsB.get(i)).getLangName();
+ type = this.wscontext.getTypemap().getType(((ParameterInfo)paramsB.get(i)).getSchemaName());
+ if (type.isSimpleType()){ //schema defined simpleType possibly with restrictions
+ paraTypeName = CUtils.getclass4qname(type.getBaseType());;
+ }
+ else{
+ paraTypeName = ((ParameterInfo)paramsB.get(i)).getLangName();
+ }
parameterName = ((ParameterInfo)paramsB.get(i)).getParamName();
elementName = ((ParameterInfo)paramsB.get(i)).getElementName().getLocalPart();
- if((CUtils.isSimpleType(((ParameterInfo)paramsB.get(i)).getLangName()))){
+ if (type.isSimpleType()){ //schema defined simpleType possibly with restrictions
+ writer.write("\tv"+i+" = DZ._functions->"+CUtils.getParameterGetValueMethodName(paraTypeName, false)+"(DZ._object,\""+elementName+"\", 0);\n");
+ }
+ else if((CUtils.isSimpleType(((ParameterInfo)paramsB.get(i)).getLangName()))){
//for simple types
writer.write("\tv"+i+" = DZ._functions->"+CUtils.getParameterGetValueMethodName(paraTypeName, false)+"(DZ._object,\""+elementName+"\", 0);\n");
- }else if((type = this.wscontext.getTypemap().getType(((ParameterInfo)paramsB.get(i)).getSchemaName())) != null && type.isArray()){
+ }else if(type != null && type.isArray()){
QName qname = WrapperUtils.getArrayType(type).getName();
String containedType = null;
if (CUtils.isSimpleType(qname)){
containedType = CUtils.getclass4qname(qname);
- writer.write("\tarray = DZ._functions->GetBasicArray(DZ._object, "+CUtils.getXSDTypeForBasicType(containedType)+"\""+elementName+"\", 0);\n");
+ writer.write("\tarray = DZ._functions->GetBasicArray(DZ._object, "+CUtils.getXSDTypeForBasicType(containedType)+", \""+elementName+"\", 0);\n");
writer.write("\tmemcpy(&v"+i+", &array, sizeof(Axis_Array));\n");
}
else{
@@ -349,12 +365,17 @@
if (returntypeissimple){
writer.write("\treturn pSZ->_functions->AddOutputParam(SZ._object, \""+returnParamName+"\", (void*)&ret, "+CUtils.getXSDTypeForBasicType(outparamType)+");\n");
}else if(returntypeisarray){
- QName qname = WrapperUtils.getArrayType(retType).getName();
+ Type arrayType = WrapperUtils.getArrayType(retType);
+ QName qname = arrayType.getName();
String containedType = null;
if (CUtils.isSimpleType(qname)){
containedType = CUtils.getclass4qname(qname);
writer.write("\treturn pSZ->_functions->AddOutputBasicArrayParam(SZ._object, (Axis_Array*)(&ret),"+CUtils.getXSDTypeForBasicType(containedType)+", \""+returnParamName+"\");\n");
}
+ else if (arrayType.isSimpleType()){//SimpleType in the schema
+ containedType = CUtils.getclass4qname(arrayType.getBaseType());
+ writer.write("\treturn pSZ->_functions->AddOutputBasicArrayParam(SZ._object, (Axis_Array*)(&ret),"+CUtils.getXSDTypeForBasicType(containedType)+", \""+returnParamName+"\");\n");
+ }
else{
containedType = qname.getLocalPart();
writer.write("\treturn pSZ->_functions->AddOutputCmplxArrayParam(SZ._object, (Axis_Array*)(&ret), (void*) Axis_Serialize_"+containedType
@@ -382,14 +403,21 @@
for (int i = 0; i < paramsC.size(); i++) {
retType = wscontext.getTypemap().getType(((ParameterInfo)paramsC.get(i)).getSchemaName());
if (retType != null){
- outparamType = retType.getLanguageSpecificName();
- returntypeisarray = retType.isArray();
+ if (retType.isSimpleType()){
+ returntypeissimple = true;
+ outparamType = CUtils.getclass4qname(retType.getBaseType());
+ }
+ else{
+ outparamType = retType.getLanguageSpecificName();
+ returntypeisarray = retType.isArray();
+ returntypeissimple = CUtils.isSimpleType(outparamType);
+ }
}
else{
outparamType = returntype.getLangName();
+ returntypeissimple = CUtils.isSimpleType(outparamType);
}
- returntypeissimple = CUtils.isSimpleType(outparamType);
- returnParamName = ((ParameterInfo)paramsC.get(i)).getParamName();
+ returnParamName = ((ParameterInfo)paramsC.get(i)).getElementName().getLocalPart();
if (returntypeissimple){
writer.write("\tSZ._functions->AddOutputParam(SZ._object, \""+returnParamName+"\", (void*)&out"+i+", "+CUtils.getXSDTypeForBasicType(outparamType)+");\n");
}else if(returntypeisarray){
@@ -438,6 +466,7 @@
try {
while(types.hasNext()){
type = (Type)types.next();
+ if (type.isSimpleType()) continue;
if (type.isArray()) continue;
typeName = type.getLanguageSpecificName();
if (typeName.startsWith(">")) continue;