eagerly load NestedExceptionUtils to avoid potential getMessage deadlock on OSGi (SPR-5607)
This commit is contained in:
parent
796a457d9f
commit
b72af54f53
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2007 the original author or authors.
|
||||
* Copyright 2002-2009 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -39,6 +39,12 @@ public abstract class NestedCheckedException extends Exception {
|
|||
/** Use serialVersionUID from Spring 1.2 for interoperability */
|
||||
private static final long serialVersionUID = 7100714597678207546L;
|
||||
|
||||
static {
|
||||
// Eagerly load the NestedExceptionUtils class to avoid classloader deadlock
|
||||
// issues on OSGi when calling getMessage(). Reported by Don Brown; SPR-5607.
|
||||
NestedExceptionUtils.class.getName();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a <code>NestedCheckedException</code> with the specified detail message.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2007 the original author or authors.
|
||||
* Copyright 2002-2009 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -19,12 +19,14 @@ package org.springframework.core;
|
|||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Subclass of IOException that properly handles a root cause,
|
||||
* Subclass of {@link IOException} that properly handles a root cause,
|
||||
* exposing the root cause just like NestedChecked/RuntimeException does.
|
||||
*
|
||||
* <p>Proper root cause handling has not been added to standard IOException before
|
||||
* Java 6, which is why we need to do it ourselves for Java 5 compatibility purposes.
|
||||
*
|
||||
* <p>The similarity between this class and the NestedChecked/RuntimeException
|
||||
* class is unavoidable, as this class needs to derive from IOException
|
||||
* and cannot derive from NestedCheckedException.
|
||||
* class is unavoidable, as this class needs to derive from IOException.
|
||||
*
|
||||
* @author Juergen Hoeller
|
||||
* @since 2.0
|
||||
|
|
@ -35,6 +37,13 @@ import java.io.IOException;
|
|||
*/
|
||||
public class NestedIOException extends IOException {
|
||||
|
||||
static {
|
||||
// Eagerly load the NestedExceptionUtils class to avoid classloader deadlock
|
||||
// issues on OSGi when calling getMessage(). Reported by Don Brown; SPR-5607.
|
||||
NestedExceptionUtils.class.getName();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a <code>NestedIOException</code> with the specified detail message.
|
||||
* @param msg the detail message
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2007 the original author or authors.
|
||||
* Copyright 2002-2009 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -39,6 +39,12 @@ public abstract class NestedRuntimeException extends RuntimeException {
|
|||
/** Use serialVersionUID from Spring 1.2 for interoperability */
|
||||
private static final long serialVersionUID = 5439915454935047936L;
|
||||
|
||||
static {
|
||||
// Eagerly load the NestedExceptionUtils class to avoid classloader deadlock
|
||||
// issues on OSGi when calling getMessage(). Reported by Don Brown; SPR-5607.
|
||||
NestedExceptionUtils.class.getName();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a <code>NestedRuntimeException</code> with the specified detail message.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2007 the original author or authors.
|
||||
* Copyright 2002-2009 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -21,14 +21,17 @@ import javax.servlet.ServletException;
|
|||
import org.springframework.core.NestedExceptionUtils;
|
||||
|
||||
/**
|
||||
* Subclass of ServletException that properly handles a root cause in terms
|
||||
* Subclass of {@link ServletException} that properly handles a root cause in terms
|
||||
* of message and stacktrace, just like NestedChecked/RuntimeException does.
|
||||
* Note that the plain ServletException doesn't expose its root cause at all,
|
||||
* neither in the exception message nor in printed stack traces!
|
||||
*
|
||||
* <p>Note that the plain ServletException doesn't expose its root cause at all,
|
||||
* neither in the exception message nor in printed stack traces! While this might
|
||||
* be fixed in later Servlet API variants (which even differ per vendor for the
|
||||
* same API version), it is not reliably available on Servlet 2.4 (the minimum
|
||||
* version required by Spring 3.x), which is why we need to do it ourselves.
|
||||
*
|
||||
* <p>The similarity between this class and the NestedChecked/RuntimeException
|
||||
* class is unavoidable, as this class needs to derive from ServletException
|
||||
* and cannot derive from NestedCheckedException.
|
||||
* class is unavoidable, as this class needs to derive from ServletException.
|
||||
*
|
||||
* @author Juergen Hoeller
|
||||
* @since 1.2.5
|
||||
|
|
@ -42,6 +45,12 @@ public class NestedServletException extends ServletException {
|
|||
/** Use serialVersionUID from Spring 1.2 for interoperability */
|
||||
private static final long serialVersionUID = -5292377985529381145L;
|
||||
|
||||
static {
|
||||
// Eagerly load the NestedExceptionUtils class to avoid classloader deadlock
|
||||
// issues on OSGi when calling getMessage(). Reported by Don Brown; SPR-5607.
|
||||
NestedExceptionUtils.class.getName();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a <code>NestedServletException</code> with the specified detail message.
|
||||
|
|
|
|||
Loading…
Reference in New Issue