in provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/tcp/BlockingInvocationStrategy.java [90:130]
public void doService(SerializationStrategy serializationStrategy, ClassLoader loader, Method method, Object target, DataByteArrayInputStream requestStream, DataByteArrayOutputStream responseStream, Runnable onComplete) {
int pos = responseStream.position();
try {
Object value = null;
Throwable error = null;
try {
Class<?>[] types = method.getParameterTypes();
final Object[] args = new Object[types.length];
serializationStrategy.decodeRequest(loader, types, requestStream, args);
value = method.invoke(target, args);
if(isStream(method.getReturnType())) {
value = replaceStream(value);
}
} catch (Throwable t) {
if (t instanceof InvocationTargetException) {
error = t.getCause();
} else {
error = t;
}
}
serializationStrategy.encodeResponse(loader, method.getReturnType(), value, error, responseStream);
} catch(Exception e) {
LOGGER.warn("Initial Encoding response for method {} failed. Retrying", method, e);
// we failed to encode the response... reposition and write that error.
try {
responseStream.position(pos);
serializationStrategy.encodeResponse(loader, method.getReturnType(), null, new RemoteException(e.toString()), responseStream);
} catch (Exception unexpected) {
LOGGER.error("Error while servicing {}", method, unexpected);
}
} finally {
onComplete.run();
}
}