簡體   English   中英

不拋出Java異常

[英]Java Exception is not thrown

我編寫了一個用戶注冊服務,如果該用戶已經存在,則應該拋出Exception。 這是register方法的代碼:

    public User register(User user, String role) throws UserExistsException{
    boolean userExists = existUserInDB(user);
    if(userExists) {
        logger.info("Yes, this user exists!");
        throw new UserExistsException("This user already exists in database!");
    }

    try {

        String encryptedPassword = getEncryptedPassword(user.getPassword(), getSalt(user));
        user.setPassword(encryptedPassword);

        Role userRole;

        if (role == null){
            TypedQuery<Role> query = entityManager.createQuery(
                    "SELECT r "+
                    "FROM Role r "+
                    "WHERE rolename = 'User'", Role.class);
            userRole = query.getSingleResult();
        } else {
            TypedQuery<Role> query = entityManager.createQuery(
                    "SELECT r "+
                    "FROM Role r "+
                    "WHERE rolename = '"+role+"'", Role.class);
            userRole = query.getSingleResult();
        }

        user.getRoles().add(userRole);
        userRole.getUsers().add(user);

        entityManager.persist(userRole);
        entityManager.persist(user);

    } catch (NoSuchAlgorithmException | NoSuchProviderException e) {

        logger.warning("CryptAPI faild: " + e.getMessage());

    }

    return user;
}

日志記錄確認existUserInDB方法返回正確的布爾值。 給定的用戶存在於數據庫中。 但是永遠不會拋出異常。 我的應用程序中有很多自行實現的異常,所有異常均被正確拋出和捕獲。 除了這一個。 有人可以幫我嗎?

這是我調用register方法的代碼。

    public String register() {
    regUser.setEmail(this.emailAdd);

    try {

        userService.register(regUser, userRole);
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Der Benutzer wurde erfolgreich registriert.", null));
        context.getExternalContext().getFlash().setKeepMessages(true);


    } catch (UserExistsException e) {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Der Benutzer ist bereits registriert!", null));
    }
    curSession.setCurrentUser(regUser);
    init();
    return "home.xhtml?faces-redirect=true";
}

這是異常的類定義:

public class UserExistsException extends Exception {

private static final long serialVersionUID = -9218609941894034576L;

public UserExistsException(){
    super();
}

public UserExistsException(String message){
    super(message);
}

}

問題可能在下面的代碼行中,該行無法完成您想要的正確操作。

    catch (UserExistsException e) {
          FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Der Benutzer ist bereits registriert!", null));
    }

您可以像這樣檢查此處執行的代碼:

catch (UserExistsException e) {
     System.out.println(">>>>>>>>>>>>>>>>>>");
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Der Benutzer ist bereits registriert!", null));
        }

如果打印了該行,則表示已引發異常。 但是其余的代碼並沒有完成您想要的事情。

在以上所有的幫助下,我得以解決。 問題不在於拋出異常。 抱歉,標題不正確。 問題是我在調用方法的return語句中具有重定向。 所以我的FacesMessage迷路了。 我在catch子句中使用以下幾行對其進行了修復:

        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Der Benutzer existiert bereits.", null));
        context.getExternalContext().getFlash().setKeepMessages(true);

感謝所有以上指導我走正確道路的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM