{
ServiceInfo service = endpoint.getServiceInfo();
final String opName = getOperationName(service, method);
final OperationInfo op = service.addOperation(opName, method);
final Class[] paramClasses = method.getParameterTypes();
boolean isDoc = style.equals(SoapConstants.STYLE_DOCUMENT);
// Setup the input message
MessageInfo inMsg = op.createMessage(createInputMessageName(op));
op.setInputMessage(inMsg);
for (int j = 0; j < paramClasses.length; j++)
{
if (!paramClasses[j].equals(MessageContext.class) &&
!isHeader(method, j) &&
isInParam(method, j))
{
final QName q = getInParameterName(endpoint, op, method, j, isDoc);
MessagePartInfo part = inMsg.addMessagePart(q, paramClasses[j]);
part.setIndex(j);
part.setDocumentation(getDocumentationProvider().getParamters(op, j));
part.setSchemaElement(isDoc || endpoint.getServiceInfo().isWrapped());
}
}
String mep = getMEP(method);
op.setMEP(mep);
if (hasOutMessage(mep))
{
// Setup the output message
MessageInfo outMsg = op.createMessage(createOutputMessageName(op));
op.setOutputMessage(outMsg);
final Class returnType = method.getReturnType();
if (!returnType.isAssignableFrom(void.class) && !isHeader(method, -1))
{
final QName q = getOutParameterName(endpoint, op, method, -1, isDoc);
MessagePartInfo part = outMsg.addMessagePart(q, method.getReturnType());
part.setIndex(-1);
part.setDocumentation(getDocumentationProvider().getResultDocumentation(op));
part.setSchemaElement(isDoc || endpoint.getServiceInfo().isWrapped());
}
for (int j = 0; j < paramClasses.length; j++)
{
if (!paramClasses[j].equals(MessageContext.class) &&
!isHeader(method, j) &&
isOutParam(method, j))
{
final QName q = getInParameterName(endpoint, op, method, j, isDoc);
MessagePartInfo part = outMsg.addMessagePart(q, paramClasses[j]);
part.setIndex(j);
part.setSchemaElement(isDoc || endpoint.getServiceInfo().isWrapped());
}
}
}
if (isCustomFaultsEnabled())
initializeFaults(endpoint, op);
op.setAsync(isAsync(method));
op.setDocumenation(documentationProvider.getOperationDoc(op));
return op;
}