private static ParamType createParam(WSDLToCorbaBinding wsdlToCorbaBinding,
String mode, XmlSchemaType schemaType, String name, QName typeName,
boolean nill) throws Exception {
CorbaTypeImpl corbaTypeImpl = null;
ParamType paramtype = new ParamType();
ModeType modeType = ModeType.fromValue(mode);
paramtype.setName(name);
paramtype.setMode(modeType);
if (schemaType == null) {
corbaTypeImpl = (CorbaTypeImpl) WSDLToCorbaHelper.CORBAPRIMITIVEMAP
.get(typeName);
if (nill) {
QName qname = corbaTypeImpl.getQName();
qname = wsdlToCorbaBinding.getHelper()
.createQNameCorbaNamespace(
qname.getLocalPart() + "_nil");
paramtype.setIdltype(qname);
} else {
paramtype.setIdltype(corbaTypeImpl.getQName());
}
} else {
// We need to get annotation information for the schema type we are about to pass in.
// This is used to produce the correct object reference type.
List<XmlSchema> schemaList = wsdlToCorbaBinding.getHelper().getXMLSchemaList();
Iterator<XmlSchema> schemaIterator = schemaList.iterator();
XmlSchemaObject schemaObj = null;
while (schemaIterator.hasNext()) {
XmlSchema s = schemaIterator.next();
XmlSchemaObjectTable schemaTable = s.getElements();
schemaObj = schemaTable.getItem(typeName);
if (schemaObj != null) {
break;
}
}
XmlSchemaAnnotation annotation = null;
if (schemaObj != null && schemaObj instanceof XmlSchemaElement) {
annotation = ((XmlSchemaElement)schemaObj).getAnnotation();
}
corbaTypeImpl = wsdlToCorbaBinding.getHelper()
.convertSchemaToCorbaType(schemaType, typeName, null, annotation, false);
if (corbaTypeImpl == null) {
return null;
} else {
if (nill) {
QName qname = corbaTypeImpl.getQName();
qname = wsdlToCorbaBinding.getHelper()
.createQNameCorbaNamespace(
qname.getLocalPart() + "_nil");
paramtype.setIdltype(qname);
} else {
paramtype.setIdltype(corbaTypeImpl.getQName());
}
}
return paramtype;
}
return paramtype;