scheu 2002/05/31 06:47:45
Modified: java/src/org/apache/axis/description ParameterDesc.java
ServiceDesc.java
java/src/org/apache/axis/wsdl/toJava JavaSkelWriter.java
java/test/wsdl Wsdl2javaTestSuite.xml
Log:
The following changes were necessary to support overloading
from skeletons.
1) Changed the Java Skeleton Map to have
keys=method names and values=List of OperationDesc.
This used to be values=OperationDesc, so there was no
way to stored overloaded method names.
2) Changed the Java Skeleton writer to assign the
appropriate type QName and type javaType to each
ParameterDesc. I added a new constructor to ParameterDesc
to simplify the generation.
3) Changed ServiceDesc code that reads the skeleton's
OperationDesc objects to conform to the new HashMap changes.
Also made some minor changes to the parameter processing
to use the existing javaType (if set).
4) Changed the roundtrip test case to once again use
skeletonDeploy.
Revision Changes Path
1.9 +14 -1 xml-axis/java/src/org/apache/axis/description/ParameterDesc.java
Index: ParameterDesc.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/description/ParameterDesc.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ParameterDesc.java 9 May 2002 13:14:27 -0000 1.8
+++ ParameterDesc.java 31 May 2002 13:47:44 -0000 1.9
@@ -92,7 +92,7 @@
}
/**
- * "Complete" constructor, suitable for usage in skeleton code
+ * Constructor
*
* @param name the parameter's fully qualified XML name
* @param mode IN, OUT, INOUT
@@ -102,6 +102,19 @@
this.name = name;
this.mode = mode;
this.typeQName = typeQName;
+ }
+
+ /**
+ * "Complete" constructor, suitable for usage in skeleton code
+ *
+ * @param name the parameter's fully qualified XML name
+ * @param mode IN, OUT, INOUT
+ * @param typeQName the parameter's XML type QName
+ * @param javaType the parameter's javaType
+ */
+ public ParameterDesc(QName name, byte mode, QName typeQName, Class javaType) {
+ this(name,mode,typeQName);
+ this.javaType = javaType;
}
public String toString() {
1.23 +23 -15 xml-axis/java/src/org/apache/axis/description/ServiceDesc.java
Index: ServiceDesc.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/description/ServiceDesc.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- ServiceDesc.java 14 May 2002 23:46:34 -0000 1.22
+++ ServiceDesc.java 31 May 2002 13:47:44 -0000 1.23
@@ -131,7 +131,7 @@
/** Lookup caches */
private HashMap name2OperationsMap = null;
- private HashMap qname2OperationMap = null;
+ private HashMap qname2OperationsMap = null;
private HashMap method2OperationMap = new HashMap();
/** Method names for which we have completed any introspection necessary */
@@ -270,14 +270,13 @@
name2OperationsMap = new HashMap();
}
+ // Add name to name2Operations Map
String name = operation.getName();
-
ArrayList overloads = (ArrayList)name2OperationsMap.get(name);
if (overloads == null) {
overloads = new ArrayList();
name2OperationsMap.put(name, overloads);
}
-
overloads.add(operation);
}
@@ -357,7 +356,7 @@
// said mapping....
initQNameMap();
- ArrayList overloads = (ArrayList)qname2OperationMap.get(qname);
+ ArrayList overloads = (ArrayList)qname2OperationsMap.get(qname);
if (overloads == null) {
if ((style == STYLE_RPC) && (name2OperationsMap != null)) {
@@ -376,18 +375,18 @@
}
private synchronized void initQNameMap() {
- if (qname2OperationMap == null) {
+ if (qname2OperationsMap == null) {
loadServiceDescByIntrospection();
- qname2OperationMap = new HashMap();
+ qname2OperationsMap = new HashMap();
for (Iterator i = operations.iterator(); i.hasNext();) {
OperationDesc operationDesc = (OperationDesc) i.next();
ArrayList list =
- (ArrayList)qname2OperationMap.get(operationDesc.
+ (ArrayList)qname2OperationsMap.get(operationDesc.
getElementQName());
if (list == null) {
list = new ArrayList();
- qname2OperationMap.put(operationDesc.getElementQName(),
+ qname2OperationsMap.put(operationDesc.getElementQName(),
list);
}
list.add(operationDesc);
@@ -438,9 +437,14 @@
param.setJavaType(type);
param.setTypeQName(typeQName);
} else {
- // A type was specified - see if they match
- Class paramClass = tm.getClassForQName(
- param.getTypeQName());
+ // A type qname was specified - see if they match
+
+ // Use the specified javaType or get one
+ // from the type mapping registry.
+ Class paramClass = param.getJavaType();
+ if (paramClass == null) {
+ paramClass = tm.getClassForQName(param.getTypeQName());
+ }
// This is a match if the paramClass is somehow
// convertable to the "real" parameter type. If not,
@@ -589,11 +593,15 @@
}
}
try {
- OperationDesc skelDesc =
- (OperationDesc)skelMethod.invoke(implClass,
+ List skelList =
+ (List)skelMethod.invoke(implClass,
new Object [] { methodName });
- if (skelDesc != null)
- addOperationDesc(skelDesc);
+ if (skelList != null) {
+ Iterator i = skelList.iterator();
+ while (i.hasNext()) {
+ addOperationDesc((OperationDesc)i.next());
+ }
+ }
} catch (IllegalAccessException e) {
return;
} catch (IllegalArgumentException e) {
1.27 +35 -8
xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaSkelWriter.java
Index: JavaSkelWriter.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaSkelWriter.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- JavaSkelWriter.java 17 May 2002 19:09:33 -0000 1.26
+++ JavaSkelWriter.java 31 May 2002 13:47:44 -0000 1.27
@@ -75,10 +75,12 @@
import org.apache.axis.utils.JavaUtils;
import org.apache.axis.wsdl.symbolTable.BindingEntry;
+import org.apache.axis.wsdl.symbolTable.Element;
import org.apache.axis.wsdl.symbolTable.Parameter;
import org.apache.axis.wsdl.symbolTable.Parameters;
import org.apache.axis.wsdl.symbolTable.PortTypeEntry;
import org.apache.axis.wsdl.symbolTable.SymbolTable;
+import org.apache.axis.wsdl.symbolTable.TypeEntry;
/**
* This is Wsdl2java's skeleton writer. It writes the <BindingName>Skeleton.java
@@ -124,14 +126,21 @@
// Declare private impl and skeleton base delegates
pw.println(" private " + implType + ";");
- pw.println(" private static java.util.Hashtable _myOperations = new
java.util.Hashtable();");
+ pw.println(" private static java.util.Map _myOperations = new
java.util.Hashtable();");
+ pw.println(" private static java.util.Collection _myOperationsList = new
java.util.ArrayList();");
pw.println();
- pw.println(" public static org.apache.axis.description.OperationDesc
getOperationDescByName(String methodName) {");
- pw.println(" return
(org.apache.axis.description.OperationDesc)_myOperations.get(methodName);");
+ pw.println(" /**");
+ pw.println(" * Returns List of OperationDesc objects with this name");
+ pw.println(" */");
+ pw.println(" public static java.util.List getOperationDescByName(String
methodName) {");
+ pw.println(" return (java.util.List)_myOperations.get(methodName);");
pw.println(" }");
pw.println();
+ pw.println(" /**");
+ pw.println(" * Returns Collection of OperationDescs");
+ pw.println(" */");
pw.println(" public static java.util.Collection getOperationDescs() {");
- pw.println(" return _myOperations.values();");
+ pw.println(" return _myOperationsList;");
pw.println(" }");
pw.println();
@@ -167,9 +176,23 @@
default:
throw new IOException();
}
- pw.println(" new
org.apache.axis.description.ParameterDesc(" +
- Utils.getNewQName(Utils.getAxisQName(p.getQName())) +
- ", " + modeStr + ", null),");
+ // Construct a parameter with the parameter name, mode, type
qname
+ // a type javaType.
+ TypeEntry paramType = p.getType();
+ if (paramType instanceof Element &&
+ paramType.getRefType() != null) {
+ paramType = paramType.getRefType();
+ }
+ pw.println(" " +
+ "new org.apache.axis.description.ParameterDesc(" +
+ Utils.getNewQName(
+ Utils.getAxisQName(p.getQName())) +
+ ", " + modeStr + "," +
+ Utils.getNewQName(
+ Utils.getAxisQName(paramType.getQName()))
+ +","+
+ p.getType().getName() + ".class"
+ +"),");
}
pw.println(" };");
@@ -224,7 +247,11 @@
}
}
- pw.println(" _myOperations.put(\"" + javaOpName + "\",
_oper);");
+ pw.println(" _myOperationsList.add(_oper);");
+ pw.println(" if (_myOperations.get(\"" + javaOpName +
"\")==null) {");
+ pw.println(" _myOperations.put(\"" + javaOpName + "\",
new java.util.ArrayList());");
+ pw.println(" }");
+ pw.println(" ((java.util.List)_myOperations.get(\"" +
javaOpName + "\")).add(_oper);");
}
}
pw.println(" }");
1.102 +0 -9 xml-axis/java/test/wsdl/Wsdl2javaTestSuite.xml
Index: Wsdl2javaTestSuite.xml
===================================================================
RCS file: /home/cvs/xml-axis/java/test/wsdl/Wsdl2javaTestSuite.xml,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -r1.101 -r1.102
--- Wsdl2javaTestSuite.xml 30 May 2002 18:55:21 -0000 1.101
+++ Wsdl2javaTestSuite.xml 31 May 2002 13:47:45 -0000 1.102
@@ -145,20 +145,11 @@
<!-- Delete the intermediate files so we recreate over a clean slate -->
<delete dir="${build.dir}/classes/test/wsdl/roundtrip"/>
<!-- Recreate Java files from the new WSDL -->
- <!-- Temporarily changed to remove skeletonDeploy...Scheu
<wsdl2java url="build/work/test/wsdl/roundtrip/Roundtrip.wsdl"
output="build/work"
deployscope="session"
serverSide="yes"
skeletonDeploy="yes"
- noimports="no"
- verbose="no"
- testcase="no">
- -->
- <wsdl2java url="build/work/test/wsdl/roundtrip/Roundtrip.wsdl"
- output="build/work"
- deployscope="session"
- serverSide="yes"
noimports="no"
verbose="no"
testcase="no">