asyncImpl.prepareContinuation();
asyncImpl.handleTimeout();
return handleAsyncResponse(exchange, asyncImpl.getResponseObject());
}
ResourceProvider provider = getResourceProvider(exchange);
Object rootInstance = null;
try {
rootInstance = getServiceObject(exchange);
Object serviceObject = getActualServiceObject(exchange, rootInstance);
return invoke(exchange, request, serviceObject);
} catch (InternalServerErrorException ex) {
responseList = checkExchangeForResponse(exchange);
if (responseList != null) {
return responseList;
}
return handleFault(ex, exchange.getInMessage());
} finally {
boolean suspended = PropertyUtils.isTrue(exchange.get(Message.SUSPENDED_INVOCATION))
|| exchange.getInMessage().getInterceptorChain().getState() == State.SUSPENDED;
if (exchange.isOneWay() || suspended) {
ProviderFactory.getInstance(exchange.getInMessage()).clearThreadLocalProxies();
}
if (!suspended && !isServiceObjectRequestScope(exchange.getInMessage())) {
provider.releaseInstance(exchange.getInMessage(), rootInstance);
} else {
exchange.put(REQUEST_WAS_SUSPENDED, suspended);
persistRoots(exchange, rootInstance, provider);
}
}