Map<String, ParamInfo> params = new HashMap<String, ParamInfo>();
// input parts
MessageInfo inputMsg = op.getInputMessage();
for (Iterator pitr = inputMsg.getMessageParts().iterator(); pitr.hasNext();)
{
MessagePartInfo part = (MessagePartInfo) pitr.next();
String varName = getUniqueName(javify(part.getName().getLocalPart()), partNames);
partNames.add(varName);
JType paramType = schema.getType(context, part);
ParamInfo param = new ParamInfo(paramType,varName);
param.setIn(true);
param.setName(part.getName());
param.setPart(part);
params.put(varName, param );
}
// input parts for each binding
for (Iterator itr = bindings.iterator(); itr.hasNext();)
{
Binding binding = (Binding) itr.next();
annotate(context, op, method, binding);
List headers = binding.getHeaders(inputMsg).getMessageParts();
for (Iterator bitr = headers.iterator(); bitr.hasNext();)
{
MessagePartInfo part = (MessagePartInfo) bitr.next();
String varName = getUniqueName(javify(part.getName().getLocalPart()), partNames);
partNames.add(varName);
JType paramType = schema.getType(context, part);
ParamInfo param = new ParamInfo(paramType,varName, true);
param.setIn(true);
param.setName(part.getName());
param.setPart(part);
params.put(varName, param);
}
}
if (op.hasOutput() && op.getOutputMessage().size() > 0)
{
MessageInfo outputMsg = op.getOutputMessage();
Iterator rtitr = outputMsg.getMessageParts().iterator();
MessagePartInfo returnPart = (MessagePartInfo) rtitr.next();
annotateReturnType(method, returnPart);
for (Iterator itr = bindings.iterator(); itr.hasNext();)
{
annotateReturnType(method, returnPart, (Binding) itr.next());
}
while (rtitr.hasNext())
{
MessagePartInfo part = (MessagePartInfo) rtitr.next();
String varName = getUniqueName(javify(part.getName().getLocalPart()), partNames);
partNames.add(varName);
JType paramType = getHolderType(context, part);
ParamInfo param = params.get(varName);
if( param == null ){
param = new ParamInfo(paramType,varName);
}
param.setOut(true);
param.setName(part.getName());
param.setPart(part);
params.put(varName, param);
}
// Annotate out message bindings
for (Iterator itr = bindings.iterator(); itr.hasNext();)
{
Binding binding = (Binding) itr.next();
List headers = binding.getHeaders(outputMsg).getMessageParts();
for (Iterator bitr = headers.iterator(); bitr.hasNext();)
{
MessagePartInfo part = (MessagePartInfo) bitr.next();
String localName = part.getName().getLocalPart();
String varName = localName;
// The same name used for input/output paramter
boolean foundMatch = false;
if (partNames.contains(localName)){
for (ParamInfo param : params.values()) {
String name = param.getPart().getName().getLocalPart();
if( localName.equals(name) && param.getPart().getIndex() == part.getIndex()){
varName = param.getVarName();
foundMatch = true;
break;
}
}
}
if( !foundMatch){
varName = getUniqueName(javify(localName), partNames);
partNames.add(varName);
}
JType paramType = getHolderType(context, part);
ParamInfo param = params.get(varName);
if( param == null ){
param = new ParamInfo(paramType,varName,true);
}
param.setOut(true);
param.setName(part.getName());
param.setParamType(paramType);
params.put(varName, param);
}
}