corbaCtx.put(ObjectMessageContext.MESSAGE_INPUT, Boolean.TRUE);
QName operationName = new QName(request.operation());
corbaCtx.put(MessageContext.WSDL_OPERATION, operationName);
ObjectMessageContext objectCtx = serverBinding.createObjectContext();
DataBindingCallback.Mode mode = sbeCallback.getServiceMode();
DataBindingCallback callback =
sbeCallback.getDataBindingCallback((QName)corbaCtx.get(MessageContext.WSDL_OPERATION),
objectCtx,
mode);
callback.initObjectContext(objectCtx);
objectCtx.putAll(corbaCtx);
// Get the WSDL definition for the operation being invoked
// TODO: Verify that two operations can't be overloaded.
OperationType opElement = CorbaUtils.getCorbaOperationType(operationName.getLocalPart(),
serverBinding.getBus(),
serverBinding.getEndpointReference());
if (opElement == null) {
throw new CorbaBindingException("Unable to locate operation type definition");
}
List<ParamType> paramTypes = opElement.getParam();
List<CorbaTypeMap> typeMaps =
((CorbaBindingImpl)serverBinding.getBindingImpl()).getCorbaTypeMaps();
// Build a list of streamables that correspond to the values that should be contained in the
// argument list of the ServerRequest, build the correct NVList and retreive the arguments
CorbaStreamable[] arguments = new CorbaStreamable[paramTypes.size()];
NVList list = prepareDIIArgsList(corbaCtx, objectCtx, arguments, paramTypes, typeMaps, callback);
request.arguments(list);
serverBinding.getBindingImpl().unmarshal(corbaCtx, objectCtx, callback);
boolean isOneWay = callback.isOneWay();
doCeltixInvocation(callback, objectCtx);
corbaCtx.put(ObjectMessageContext.MESSAGE_INPUT, Boolean.FALSE);
if (!isOneWay) {
if (objectCtx.getException() != null) {
serverBinding.getBindingImpl().marshalFault(objectCtx, corbaCtx, callback);
Any exAny = orb.create_any();
exAny.insert_Streamable(corbaCtx.getMessage().getStreamableException());
request.set_exception(exAny);
} else {