Port port = selectPort(service.getPorts(), portName);
if (portName == null) {
portName = port.getName();
}
Binding binding = port.getBinding();
Call call = dpf.createCall(QName.valueOf(portName),
QName.valueOf(operationName));
((org.apache.axis.client.Call)call).setTimeout(new Integer(15*1000));
((org.apache.axis.client.Call)call).setProperty(ElementDeserializer.DESERIALIZE_CURRENT_ELEMENT, Boolean.TRUE);
// Output types and names
Vector outNames = new Vector();
// Input types and names
Vector inNames = new Vector();
Vector inTypes = new Vector();
SymbolTable symbolTable = wsdlParser.getSymbolTable();
BindingEntry bEntry =
symbolTable.getBindingEntry(binding.getQName());
Parameters parameters = null;
Iterator i = bEntry.getParameters().keySet().iterator();
while (i.hasNext()) {
Operation o = (Operation) i.next();
if (o.getName().equals(operationName)) {
operation = o;
parameters = (Parameters) bEntry.getParameters().get(o);
break;
}
}
if ((operation == null) || (parameters == null)) {
throw new RuntimeException(operationName + " was not found.");
}
// loop over paramters and set up in/out params
for (int j = 0; j < parameters.list.size(); ++j) {
Parameter p = (Parameter) parameters.list.get(j);
if (p.getMode() == 1) { // IN
inNames.add(p.getQName().getLocalPart());
inTypes.add(p);
} else if (p.getMode() == 2) { // OUT
outNames.add(p.getQName().getLocalPart());
} else if (p.getMode() == 3) { // INOUT
inNames.add(p.getQName().getLocalPart());
inTypes.add(p);
outNames.add(p.getQName().getLocalPart());
}
}
// set output type
if (parameters.returnParam != null) {
if(!parameters.returnParam.getType().isBaseType()) {
((org.apache.axis.client.Call)call).registerTypeMapping(org.w3c.dom.Element.class, parameters.returnParam.getType().getQName(),
new ElementSerializerFactory(),
new ElementDeserializerFactory());
}
// Get the QName for the return Type
QName returnType = org.apache.axis.wsdl.toJava.Utils.getXSIType(
parameters.returnParam);
QName returnQName = parameters.returnParam.getQName();
outNames.add(returnQName.getLocalPart());
}
if (inNames.size() != args.length - 2)
throw new RuntimeException("Need " + inNames.size() + " arguments!!!");
for (int pos = 0; pos < inNames.size(); ++pos) {
String arg = args[pos + 2];
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++) {
System.out.println(inNames.get(j) + "=" + inputs.get(j));
}
Object ret = call.invoke(inputs.toArray());
Map outputs = call.getOutputParams();
HashMap map = new HashMap();
for (int pos = 0; pos < outNames.size(); ++pos) {
String name = (String) outNames.get(pos);
Object value = outputs.get(name);