Pregunta

My code look like this:

    SQLException sqlExc;
    //resX is obtained from the method signature and it's a ResourceException
    Exception linkedExc = resX.getLinkedException();
    // if linkedExc exception is a SQL Exception, assign it to sqlExc
    if (linkedExc instanceof SQLException) {
        sqlExc = (SQLException) linkedExc;
    }

Would changing

Exception linkedX = resX.getLinkedException();

to

Exception linkedX = new Exception(resX.getCause());

give the same result? or the type of Exception would not be kept in the newly created exception?

If not what is the best way to do it?

This is a 15 years old code, that is why it's using deprecated methods. I'm trying to fix that.

¿Fue útil?

Solución

The answer is yes. The below code is proving it. You can use it as written here or as you wrote it. Both should pass the if statement.

import java.sql.SQLException;
import javax.resource.ResourceException;   

public class Linking {

    public static void main(String[] args) {

        SQLException resW = new SQLException("blubb");
        ResourceException resX = new ResourceException("a message", resW);
        SQLException sqlExc = null;
        Throwable linkedExc = resX.getCause();

        // if linkedExc exception is a SQL Exception, assign it to sqlExc
        if (linkedExc instanceof SQLException) {
            sqlExc = (SQLException) linkedExc;
        }           
        if (sqlExc != null)
            sqlExc.printStackTrace();
    }    
}

The documentation on ResourceException ( http://docs.oracle.com/javaee/1.4/api/javax/resource/ResourceException.html#setLinkedException%28java.lang.Exception%29 ) says:

Deprecated. J2SE release 1.4 supports a chained exception facility that allows any throwable to know about another throwable, if any, that caused it to get thrown. Refer to getCause and initCause methods of the java.lang.Throwable class.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top