pheromix
pheromix

Reputation: 19307

Throwing an exception makes error of unhandled exception

I created an exception :

public class PkDeleteException extends java.lang.Exception {

    private static final long serialVersionUID = 1L;

    public PkDeleteException(String msg) {

        super(msg);

    }

}

Now I threw it in the catch block of some code :

import com.ambre.pta.utils.PkDeleteException;

public class AdminRole {

    @Autowired
    private Environment env;

    @Autowired
    private RoleDAO roleDao;

    public void del(@RequestParam String id) {

        try {

            roleDao.delete(id);

        } catch (org.hibernate.exception.ConstraintViolationException e) {

            Role role = roleDao.get(id);

            String errMsg = env.getProperty("admin.list.profils.err.suppr");

            errMsg = errMsg.replace("%s", role.getRole_lib());

            throw new PkDeleteException(errMsg);

        }

    }

}

But I got an error Unhandled exception type PkDeleteException !

There are suggested solutions proposed by Eclipse but I do not want to follow them ! So why is there this error ?

Upvotes: 0

Views: 7514

Answers (2)

janith1024
janith1024

Reputation: 1042

Your del method should throw PkDeleteException. Your method should be like follow

public void del(@RequestParam String id) throws PkDeleteException  {

    try {

        roleDao.delete(id);

    } catch (org.hibernate.exception.ConstraintViolationException e) {

        Role role = roleDao.get(id);

        String errMsg = env.getProperty("admin.list.profils.err.suppr");

        errMsg = errMsg.replace("%s", role.getRole_lib());

        throw new PkDeleteException(errMsg);

    }

}

Upvotes: -1

Vasu
Vasu

Reputation: 22422

In general or for most of the scenarios, you never create a custom exception by extending java.lang.Exception class directly, rather you need to extend java.lang.RuntimeException class (or it's subtypes, which is even more preferable).

As your current PkDeleteException is checked Exception, you need to declare that in your method signature using throws clause (option-2, not preferable) or the best practice is to convert it into unchecked Exception (option-1) like below:

Option(1) - Use unchecked Exception (Preferable):

public class PkDeleteException extends RuntimeExcetion {

    private static final long serialVersionUID = 1L;

    public PkDeleteException(String msg) {

        super(msg);

    }

}

Option(2): Change your method signature

from

public void del(@RequestParam String id)

to

public void del(@RequestParam String id) throws PkDeleteException

I suggest you to have a look at here

Upvotes: 2

Related Questions