Java 异常不会抛出

标签 java exception ejb

我编写了一个用户注册服务,如果用户已经存在,它应该抛出异常。这是注册方法的代码:

    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 方法返回正确的 boolean 值。给定的用户存在于数据库中。但永远不会抛出异常。 我的应用程序中有很多自行实现的异常,所有异常都被正确抛出和捕获。除了这一个之外,其他都有。有人可以帮我解决这个问题吗?

这是我调用注册方法的代码。

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

如果打印出该行,则表示已抛出异常。但其余代码并没有做您想要的事情。

关于Java 异常不会抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38736885/

相关文章:

java - 在 JLabel 中刷新同一图像

Java 对象方法不可访问

java - StandardReflectionParameterNameDiscoverer 如何编译到 jdk 版本 50?

haskell - 在 happstack 中捕获纯函数的异常

c++ - 创建二维数组异常 : clean-up before re-throw in C++

java - 在全局事务中运行的本地事务的正确含义是什么?

java - 有状态 session Bean 钝化和序列化 - EJB

java - 根据返回值计算平均值

大型项目的 C++ 异常

java.rmi.ServerException : RuntimeException