javax.wsdl.Operation operation = definition.createOperation();
operation.setName(op.getName());
operation.setUndefined(false);
Input input = definition.createInput();
Message inputMsg = definition.createMessage();
String namespaceURI = definition.getQName().getNamespaceURI();
QName inputMsgName = new QName(namespaceURI, op.getName());
inputMsg.setQName(inputMsgName);
inputMsg.setUndefined(false);
definition.addMessage(inputMsg);
List<ElementInfo> elements = null;
// FIXME: By default, java interface is mapped to doc-lit-wrapper style WSDL
if (op.getWrapper() != null) {
// Generate doc-lit-wrapper style
inputMsg.addPart(generateWrapperPart(definition, op, helpers, wrappers, true));
} else {
// Bare style
int i = 0;
for (DataType d : op.getInputType().getLogical()) {
inputMsg.addPart(generatePart(definition, d, "arg" + i));
elements = new ArrayList<ElementInfo>();
ElementInfo element = getElementInfo(d.getPhysical(), d, null, helpers);
elements.add(element);
QName elementName = ((XMLType)d.getLogical()).getElementName();
wrappers.put(elementName, elements);
i++;
}
}
input.setMessage(inputMsg);
operation.setInput(input);
if (!op.isNonBlocking()) {
Output output = definition.createOutput();
Message outputMsg = definition.createMessage();
QName outputMsgName = new QName(namespaceURI, op.getName() + "Response");
outputMsg.setQName(outputMsgName);
outputMsg.setUndefined(false);
definition.addMessage(outputMsg);
if (op.getWrapper() != null) {
outputMsg.addPart(generateWrapperPart(definition, op, helpers, wrappers, false));
} else {
if ((op.getOutputType() != null) && ( op.getOutputType().getLogical().size() != 0)) {
DataType outputType = op.getOutputType().getLogical().get(0);
outputMsg.addPart(generatePart(definition, outputType, "return"));
elements = new ArrayList<ElementInfo>();
ElementInfo element = getElementInfo(outputType.getPhysical(), outputType, null, helpers);
elements.add(element);
QName elementName = ((XMLType)outputType.getLogical()).getElementName();
wrappers.put(elementName, elements);
}
}
output.setMessage(outputMsg);
operation.setOutput(output);
operation.setStyle(OperationType.REQUEST_RESPONSE);
} else {
operation.setStyle(OperationType.ONE_WAY);
}
for (DataType<DataType> faultType: op.getFaultTypes()) {
Fault fault = definition.createFault();
// TUSCANY-3778 - use the definition namespace not the element namespace to create the fault message
QName faultName = ((XMLType)faultType.getLogical().getLogical()).getElementName();
QName faultMsgName = new QName(namespaceURI, faultName.getLocalPart());
fault.setName(faultName.getLocalPart());
Message faultMsg = definition.getMessage(faultMsgName);
if (faultMsg == null) {
faultMsg = definition.createMessage();
faultMsg.setQName(faultMsgName);
faultMsg.setUndefined(false);
definition.addMessage(faultMsg);
faultMsg.addPart(generatePart(definition, faultType.getLogical(), faultName.getLocalPart()));
}
fault.setMessage(faultMsg);
operation.addFault(fault);
if (faultType.getLogical().getPhysical() != faultType.getPhysical()) {
// create special wrapper for type indirection to real fault bean