in provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpInvocationHandler.java [107:137]
private Object handleSyncCall(Method method, Object[] args) throws Throwable {
Throwable error;
Object result;
try (
Socket socket = openSocket();
ObjectOutputStream out = new BasicObjectOutputStream(socket.getOutputStream())
) {
socket.setSoTimeout(timeoutMillis);
out.writeUTF(endpointId);
out.writeObject(method.getName());
out.writeObject(args);
out.flush();
try (BasicObjectInputStream in = new BasicObjectInputStream(socket.getInputStream())) {
in.addClassLoader(cl);
error = (Throwable) in.readObject();
result = readReplaceVersion(in.readObject());
}
if (error == null)
return result;
else if (error instanceof InvocationTargetException)
error = error.getCause(); // exception thrown from remotely invoked method (not our problem)
else
throw error; // exception thrown by provider itself
} catch (SocketTimeoutException e) {
throw new ServiceException("Timeout calling " + host + ":" + port + " method: " + method.getName(), ServiceException.REMOTE, e);
} catch (Throwable e) {
throw new ServiceException("Error calling " + host + ":" + port + " method: " + method.getName(), ServiceException.REMOTE, e);
}
throw error;
}