private Object handleSyncCall()

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;
    }