eagerly load NestedExceptionUtils to avoid potential getMessage deadlock on OSGi (SPR-5607)

This commit is contained in:
Juergen Hoeller
2009-05-11 22:22:11 +00:00
parent 796a457d9f
commit b72af54f53
4 changed files with 42 additions and 12 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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.