dims 2002/10/28 14:11:15 Modified: java/samples/client DynamicInvoker.java java/src/org/apache/axis/wsdl/symbolTable TypeEntry.java Log: Part of Fix for Bug 13883 - DII WSDL processing doesn't deal with wrapped mode Note: - We can send many more data types. Anything that has a SimpleDeserializer... Revision Changes Path 1.7 +23 -50 xml-axis/java/samples/client/DynamicInvoker.java Index: DynamicInvoker.java =================================================================== RCS file: /home/cvs/xml-axis/java/samples/client/DynamicInvoker.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DynamicInvoker.java 28 Oct 2002 19:37:41 -0000 1.6 +++ DynamicInvoker.java 28 Oct 2002 22:11:15 -0000 1.7 @@ -54,13 +54,17 @@ */ package samples.client; +import org.apache.axis.Constants; +import org.apache.axis.encoding.ser.SimpleDeserializer; import org.apache.axis.wsdl.gen.Parser; +import org.apache.axis.wsdl.symbolTable.BaseType; import org.apache.axis.wsdl.symbolTable.BindingEntry; import org.apache.axis.wsdl.symbolTable.Parameter; import org.apache.axis.wsdl.symbolTable.Parameters; import org.apache.axis.wsdl.symbolTable.ServiceEntry; import org.apache.axis.wsdl.symbolTable.SymTabEntry; import org.apache.axis.wsdl.symbolTable.SymbolTable; +import org.apache.axis.wsdl.symbolTable.TypeEntry; import javax.wsdl.Binding; import javax.wsdl.Operation; @@ -69,6 +73,8 @@ import javax.wsdl.extensions.soap.SOAPAddress; import javax.xml.namespace.QName; import javax.xml.rpc.Call; +import javax.xml.rpc.encoding.Deserializer; +import javax.xml.rpc.encoding.DeserializerFactory; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -187,7 +193,6 @@ // Output types and names Vector outNames = new Vector(); - Vector outTypes = new Vector(); // Input types and names Vector inNames = new Vector(); @@ -214,20 +219,15 @@ for (int j = 0; j < parameters.list.size(); ++j) { Parameter p = (Parameter) parameters.list.get(j); - // Get the QName representing the parameter type - QName paramType = org.apache.axis.wsdl.toJava.Utils.getXSIType(p); - if (p.getMode() == 1) { // IN inNames.add(p.getQName().getLocalPart()); - addTypeClass(inTypes, paramType.getLocalPart()); + inTypes.add(p); } else if (p.getMode() == 2) { // OUT outNames.add(p.getQName().getLocalPart()); - addTypeClass(outTypes, paramType.getLocalPart()); } else if (p.getMode() == 3) { // INOUT inNames.add(p.getQName().getLocalPart()); - addTypeClass(inTypes, paramType.getLocalPart()); + inTypes.add(p); outNames.add(p.getQName().getLocalPart()); - addTypeClass(outTypes, paramType.getLocalPart()); } } @@ -239,7 +239,6 @@ QName returnQName = parameters.returnParam.getQName(); outNames.add(returnQName.getLocalPart()); - addTypeClass(outTypes, returnType.getLocalPart()); } if (inNames.size() != args.length - 2) @@ -247,8 +246,8 @@ for (int pos = 0; pos < inNames.size(); ++pos) { String arg = args[pos + 2]; - Class c = (Class) inTypes.get(pos); - inputs.add(getParamData(c, arg)); + Parameter p = (Parameter) inTypes.get(pos); + inputs.add(getParamData((org.apache.axis.client.Call) call, p, arg)); } System.out.println("Executing operation " + operationName + " with parameters:"); for (int j = 0; j < inputs.size(); j++) { @@ -277,46 +276,20 @@ * @param c * @param arg */ - private Object getParamData(Class c, String arg) { - Object value; - if (c.equals(String.class)) { - value = arg; - } else if (c.equals(Double.TYPE)) { - value = new Double(arg); - } else if (c.equals(Float.TYPE)) { - value = new Float(arg); - } else if (c.equals(Integer.TYPE)) { - value = new Integer(arg); - } else if (c.equals(Boolean.TYPE)) { - value = new Boolean(arg); - } else { - throw new RuntimeException("not know how to convert '" + arg - + "' into " + c); - } - return value; - } - - /** - * Method addTypeClass - * - * @param v - * @param type - */ - private void addTypeClass(Vector v, String type) { - - if ("string".equals(type)) { - v.add(String.class); - } else if ("double".equals(type)) { - v.add(Integer.TYPE); - } else if ("float".equals(type)) { - v.add(Float.TYPE); - } else if ("int".equals(type)) { - v.add(Integer.TYPE); - } else if ("boolean".equals(type)) { - v.add(Boolean.TYPE); - } else { - throw new RuntimeException("Type " + type + " is not supported"); + private Object getParamData(org.apache.axis.client.Call c, Parameter p, String arg) throws Exception { + // Get the QName representing the parameter type + QName paramType = org.apache.axis.wsdl.toJava.Utils.getXSIType(p); + + TypeEntry type = p.getType(); + if (type instanceof BaseType && ((BaseType) type).isBaseType()) { + DeserializerFactory factory = c.getTypeMapping().getDeserializer(paramType); + Deserializer deserializer = factory.getDeserializerAs(Constants.AXIS_SAX); + if (deserializer instanceof SimpleDeserializer) { + return ((SimpleDeserializer)deserializer).makeValue(arg); + } } + throw new RuntimeException("not know how to convert '" + arg + + "' into " + c); } /** 1.8 +4 -0 xml-axis/java/src/org/apache/axis/wsdl/symbolTable/TypeEntry.java Index: TypeEntry.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/symbolTable/TypeEntry.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- TypeEntry.java 18 Sep 2002 16:10:37 -0000 1.7 +++ TypeEntry.java 28 Oct 2002 22:11:15 -0000 1.8 @@ -208,6 +208,10 @@ } } + public boolean isBaseType() { + return isBaseType; + } + public boolean isSimpleType() { return isSimpleType; }