Message request = mex[0].createMessage(_invocation.requestType);
request.setMessage(_invocation.request);
_invocation.invokeTime = System.currentTimeMillis();
running[0] = mex[0].invoke(request);
Status status = mex[0].getStatus();
CorrelationStatus cstatus = mex[0].getCorrelationStatus();
if (_invocation.expectedStatus != null && !status.equals(_invocation.expectedStatus))
failure(_invocation, "Unexpected message exchange status", _invocation.expectedStatus, status);
if (_invocation.expectedCorrelationStatus != null && !cstatus.equals(_invocation.expectedCorrelationStatus))
failure(_invocation, "Unexpected correlation status", _invocation.expectedCorrelationStatus, cstatus);
return null;
} catch (Exception ex) {
if (_invocation.expectedInvokeException == null)
failure(_invocation, "Unexpected invocation exception.", ex);
else if (_invocation.expectedInvokeException.isAssignableFrom(ex.getClass()))
failure(_invocation, "Unexpected invocation exception.", _invocation.expectedInvokeException, ex.getClass());
return null;
}
}
});
if (isFailed())
return;
try {
running[0].get(_invocation.maximumWaitMs, TimeUnit.MILLISECONDS);
} catch (Exception ex) {
failure(_invocation, "Exception on future object.", ex);
return;
}
long ctime = System.currentTimeMillis();
long itime = ctime - _invocation.invokeTime;
if (_invocation.minimumWaitMs != null && _invocation.minimumWaitMs >= itime)
failure(_invocation, "Response received too soon.", _invocation.minimumWaitMs, itime);
if (_invocation.maximumWaitMs <= itime)
failure(_invocation, "Response took too long.", _invocation.maximumWaitMs, itime);
if (isFailed())
return;
if (_invocation.expectedResponsePattern != null) {
scheduler.execTransaction(new Callable<Void>() {
public Void call() throws Exception {
Status finalstat = mex[0].getStatus();
if (_invocation.expectedFinalStatus != null && !_invocation.expectedFinalStatus.equals(finalstat))
if (finalstat.equals(Status.FAULT)) {
failure(_invocation, "Unexpected final message exchange status", _invocation.expectedFinalStatus, "FAULT: "
+ mex[0].getFault() + " | " + mex[0].getFaultExplanation());
} else {
failure(_invocation, "Unexpected final message exchange status", _invocation.expectedFinalStatus, finalstat);
}