Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > RMI+RemoteException - вернуть клиенту ошибку.


Автор: Killer_13 21.7.2011, 21:03
Здравств.
Вот такая вот ситуация.
Сервер RMI - есть такая вот функция на сервере. 
Код

@Override
    public String login(String username, String password) throws RemoteException {
        String sidTemp;
        if(!this.userMap.containsKey(username))
            throw new AcessDeniedException();
        if(!this.userMap.get(username).eqalsPassword(password))
            throw new AcessDeniedException();

        sidTemp=getSID();
        this.sidMap.put(sidTemp, this.userMap.get(username));
        return sidTemp;
    }


Как мне вернуть на клиент Стринг с например номером ошибки. которая бросается в случае 
Код

throw new AcessDeniedException();

Класс AcessDeniedException находится тоже на сервере.
Код

package exception;

import java.rmi.RemoteException;

public class AcessDeniedException extends RemoteException {

}


Вроде и понимаю как работают Exceptions, но вот например в данном случае когда у меня нету такого юзера, то чтоб вывести клиенту, что введено что-то не так, тоисть такого юзера не существует, - спасибо.

Автор: Killer_13 21.7.2011, 23:49
Кажется разобрался, а в принципе ничего и разбирать не нужно было, только нужно было хорошенько протестировать. smile
При вызове метода в котором есть RuntimeException на стороне клиента вызываемый метод должен быть заключен в 

Метод на стороне клиента.
Код

public void login(){
        try {
            String str = Main.getNetCon().login(this.login.getUserName_tf().getText(), String.valueOf(this.login.getPass_tf().getPassword()));
            System.out.println(str);
        } catch (RemoteException e) {
            System.out.println(e.getMessage()+ " Bla bla bla");
        }
    }
 
Таким образом можем ловить в catch свои ошибки с сервера. smile
Я все правильно понял? smile

Автор: Stolzen 22.7.2011, 09:54
Правильнее использовать e.getCause() метод, и оборачивать исключения в RemoteException. А getCause() позволяет вычленить обернутое исключение. 

Автор: Killer_13 22.7.2011, 13:01
Если можно - чуток поподробней - буду благодарен. smile

Автор: Stolzen 22.7.2011, 13:15
Вот, набросал для примера:

Код

package exceptions;

import java.rmi.RemoteException;

public class RemoteExceptionTest {
    static public void main(String[] args) {
        RemoteExceptionTest test = new RemoteExceptionTest();
        
        try {
            test.login("login", "pass");
        } catch (RemoteException e) {
            Throwable cause = e.getCause();
            
            if (cause instanceof AcessDeniedException) {
                System.out.println("Access denied");
            }
        }
    }
    
    public String login(String username, String password) throws RemoteException {
        throw new RemoteException("access denied", new AcessDeniedException());
    }
}

class AcessDeniedException extends Exception {}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)