This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 7.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/7.0.x by this push: new c2b6147 Align AsyncContextImpl with 8.5.x c2b6147 is described below commit c2b6147a6d22a55618b2db88bfe2f732fc8663d9 Author: Mark Thomas <ma...@apache.org> AuthorDate: Wed Jul 10 13:00:30 2019 +0100 Align AsyncContextImpl with 8.5.x Spacing, improved i18n, simplify code, remove anonymous inner classes, obtain InstanceManager directly from the Context --- .../org/apache/catalina/core/AsyncContextImpl.java | 110 ++++++++++----------- .../apache/catalina/core/LocalStrings.properties | 17 +--- .../catalina/core/LocalStrings_es.properties | 12 --- .../catalina/core/LocalStrings_fr.properties | 27 +++-- .../catalina/core/LocalStrings_ja.properties | 12 --- .../catalina/security/SecurityClassLoad.java | 63 +++++------- 6 files changed, 90 insertions(+), 151 deletions(-) diff --git a/java/org/apache/catalina/core/AsyncContextImpl.java b/java/org/apache/catalina/core/AsyncContextImpl.java index 15c6610..bba05e9 100644 --- a/java/org/apache/catalina/core/AsyncContextImpl.java +++ b/java/org/apache/catalina/core/AsyncContextImpl.java @@ -21,9 +21,7 @@ import java.lang.reflect.InvocationTargetException; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import javax.naming.NamingException; @@ -50,16 +48,11 @@ import org.apache.coyote.AsyncContextCallback; import org.apache.coyote.RequestInfo; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; -import org.apache.tomcat.InstanceManager; import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.util.res.StringManager; import org.apache.tomcat.util.security.PrivilegedGetTccl; import org.apache.tomcat.util.security.PrivilegedSetTccl; -/** - * - * @author fhanik - * - */ + public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { private static final Log log = LogFactory.getLog(AsyncContextImpl.class); @@ -78,14 +71,14 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { private volatile ServletRequest servletRequest = null; private volatile ServletResponse servletResponse = null; - private List<AsyncListenerWrapper> listeners = new ArrayList<AsyncListenerWrapper>(); + private final List<AsyncListenerWrapper> listeners = new ArrayList<AsyncListenerWrapper>(); private boolean hasOriginalRequestAndResponse = true; private volatile Runnable dispatch = null; private Context context = null; + // Default of 30000 (30s) is set by the connector private long timeout = -1; private AsyncEvent event = null; - private Request request; - private volatile InstanceManager instanceManager; + private volatile Request request; public AsyncContextImpl(Request request) { if (log.isDebugEnabled()) { @@ -105,8 +98,7 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { @Override public void fireOnComplete() { - List<AsyncListenerWrapper> listenersCopy = - new ArrayList<AsyncListenerWrapper>(); + List<AsyncListenerWrapper> listenersCopy = new ArrayList<AsyncListenerWrapper>(); listenersCopy.addAll(listeners); ClassLoader oldCL; @@ -130,8 +122,8 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { listener.fireOnComplete(event); } catch (Throwable t) { ExceptionUtils.handleThrowable(t); - log.warn("onComplete() failed for listener of type [" + - listener.getClass().getName() + "]", t); + log.warn(sm.getString("asyncContextImpl.onCompleteError", + listener.getClass().getName()), t); } } } finally { @@ -166,18 +158,17 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { listener.fireOnTimeout(event); } catch (Throwable t) { ExceptionUtils.handleThrowable(t); - log.warn("onTimeout() failed for listener of type [" + - listener.getClass().getName() + "]", t); + log.warn(sm.getString("asyncContextImpl.onTimeoutError", + listener.getClass().getName()), t); } } request.getCoyoteRequest().action( ActionCode.ASYNC_IS_TIMINGOUT, result); - return !result.get(); } finally { Thread.currentThread().setContextClassLoader(oldCL); } } - return true; + return !result.get(); } @Override @@ -241,20 +232,8 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { // request/response and that in turn may trigger recycling of this // object before the in-progress count can be decremented final Context context = this.context; - Runnable run = new Runnable() { - @Override - public void run() { - request.getCoyoteRequest().action(ActionCode.ASYNC_DISPATCHED, null); - try { - applicationDispatcher.dispatch(servletRequest, servletResponse); - }catch (Exception x) { - //log.error("Async.dispatch",x); - throw new RuntimeException(x); - } - } - }; - - this.dispatch = run; + this.dispatch = new AsyncRunnable( + request, applicationDispatcher, servletRequest, servletResponse); this.request.getCoyoteRequest().action(ActionCode.ASYNC_DISPATCH, null); clearServletRequestResponse(); context.decrementInProgressAsyncCount(); @@ -317,8 +296,8 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { check(); T listener = null; try { - listener = (T) getInstanceManager().newInstance(clazz.getName(), - clazz.getClassLoader()); + listener = (T) context.getInstanceManager().newInstance( + clazz.getName(), clazz.getClassLoader()); } catch (InstantiationException e) { ServletException se = new ServletException(e); throw se; @@ -351,7 +330,6 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { dispatch = null; event = null; hasOriginalRequestAndResponse = true; - instanceManager = null; listeners.clear(); request = null; clearServletRequestResponse(); @@ -384,8 +362,7 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { this.hasOriginalRequestAndResponse = originalRequestResponse; this.event = new AsyncEvent(this, request, response); - List<AsyncListenerWrapper> listenersCopy = - new ArrayList<AsyncListenerWrapper>(); + List<AsyncListenerWrapper> listenersCopy = new ArrayList<AsyncListenerWrapper>(); listenersCopy.addAll(listeners); listeners.clear(); for (AsyncListenerWrapper listener : listenersCopy) { @@ -393,8 +370,8 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { listener.fireOnStartAsync(event); } catch (Throwable t) { ExceptionUtils.handleThrowable(t); - log.warn("onStartAsync() failed for listener of type [" + - listener.getClass().getName() + "]", t); + log.warn(sm.getString("asyncContextImpl.onStartAsyncError", + listener.getClass().getName()), t); } } } @@ -464,16 +441,15 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { if (fireOnError) { AsyncEvent errorEvent = new AsyncEvent(event.getAsyncContext(), event.getSuppliedRequest(), event.getSuppliedResponse(), t); - List<AsyncListenerWrapper> listenersCopy = - new ArrayList<AsyncListenerWrapper>(); + List<AsyncListenerWrapper> listenersCopy = new ArrayList<AsyncListenerWrapper>(); listenersCopy.addAll(listeners); for (AsyncListenerWrapper listener : listenersCopy) { try { listener.fireOnError(errorEvent); } catch (Throwable t2) { ExceptionUtils.handleThrowable(t2); - log.warn("onError() failed for listener of type [" + - listener.getClass().getName() + "]", t2); + log.warn(sm.getString("asyncContextImpl.onErrorError", + listener.getClass().getName()), t2); } } } @@ -564,20 +540,6 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { } } - private InstanceManager getInstanceManager() { - if (instanceManager == null) { - if (context instanceof StandardContext) { - instanceManager = ((StandardContext)context).getInstanceManager(); - } else { - instanceManager = new DefaultInstanceManager(null, - new HashMap<String, Map<String, String>>(), - context, - getClass().getClassLoader()); - } - } - return instanceManager; - } - private void check() { if (request == null) { // AsyncContext has been recycled and should not be being used @@ -585,14 +547,15 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { "asyncContextImpl.requestEnded")); } } + private static class DebugException extends Exception { private static final long serialVersionUID = 1L; } private static class RunnableWrapper implements Runnable { - private Runnable wrapped = null; - private Context context = null; + private final Runnable wrapped; + private final Context context; public RunnableWrapper(Runnable wrapped, Context ctxt) { this.wrapped = wrapped; @@ -629,6 +592,33 @@ public class AsyncContextImpl implements AsyncContext, AsyncContextCallback { } } } + } + + + private static class AsyncRunnable implements Runnable { + + private final AsyncDispatcher applicationDispatcher; + private final Request request; + private final ServletRequest servletRequest; + private final ServletResponse servletResponse; + + public AsyncRunnable(Request request, AsyncDispatcher applicationDispatcher, + ServletRequest servletRequest, ServletResponse servletResponse) { + this.request = request; + this.applicationDispatcher = applicationDispatcher; + this.servletRequest = servletRequest; + this.servletResponse = servletResponse; + } + + @Override + public void run() { + request.getCoyoteRequest().action(ActionCode.ASYNC_DISPATCHED, null); + try { + applicationDispatcher.dispatch(servletRequest, servletResponse); + } catch (Exception e) { + throw new RuntimeException(sm.getString("asyncContextImpl.asyncDispachError"), e); + } + } } } diff --git a/java/org/apache/catalina/core/LocalStrings.properties b/java/org/apache/catalina/core/LocalStrings.properties index e92247a..f788a76 100644 --- a/java/org/apache/catalina/core/LocalStrings.properties +++ b/java/org/apache/catalina/core/LocalStrings.properties @@ -92,8 +92,13 @@ aprListener.tooLateForSSLEngine=Cannot setSSLEngine: SSL has already been initia aprListener.tooLateForSSLRandomSeed=Cannot setSSLRandomSeed: SSL has already been initialized aprListener.wrongFIPSMode=Unexpected value of FIPSMode option of AprLifecycleListener: "{0}" +asyncContextImpl.asyncDispachError=Error during asynchronous dispatch asyncContextImpl.dispatchingStarted=Asynchronous dispatch operation has already been called. Additional asynchronous dispatch operation within the same asynchronous cycle is not allowed. asyncContextImpl.noAsyncDispatcher=The dispatcher returned from the ServletContext does not support asynchronous dispatching +asyncContextImpl.onCompleteError=onComplete() call failed for listener of type [{0}] +asyncContextImpl.onErrorError=onError() call failed for listener of type [{0}] +asyncContextImpl.onStartAsyncError=onStartAsync() call failed for listener of type [{0}] +asyncContextImpl.onTimeoutError=onTimeout() call failed for listener of type [{0}] asyncContextImpl.request.ise=It is illegal to call getRequest() after complete() or any of the dispatch() methods has been called asyncContextImpl.requestEnded=The request associated with the AsyncContext has already completed processing. asyncContextImpl.response.ise=It is illegal to call getResponse() after complete() or any of the dispatch() methods has been called @@ -116,21 +121,9 @@ defaultInstanceManager.restrictedListenersResource=Restricted listeners property defaultInstanceManager.restrictedServletsResource=Restricted servlets property file not found [{0}] defaultInstanceManager.restrictedWrongValue=Wrong value in restricted classes property file [{0}] for class name [{1}]. Expected value: [restricted], actual value: [{2}] -fastEngineMapper.alreadyStarted=FastEngineMapper {0} has already been started -fastEngineMapper.notStarted=FastEngineMapper {0} has not yet been started - filterChain.filter=Filter execution threw an exception filterChain.servlet=Servlet execution threw an exception -httpContextMapper.container=This container is not a StandardContext - -httpEngineMapper.container=This container is not a StandardEngine - -httpHostMapper.container=This container is not a StandardHost - -interceptorValve.alreadyStarted=InterceptorValve has already been started -interceptorValve.notStarted=InterceptorValve has not yet been started - jreLeakListener.authPolicyFail=Error whilst attempting to prevent memory leak in javax.security.auth.Policy class jreLeakListener.classToInitializeFail=Failed to load class {0} during Tomcat start to prevent possible memory leaks. jreLeakListener.gcDaemonFail=Failed to trigger creation of the GC Daemon thread during Tomcat start to prevent possible memory leaks. This is expected on non-Sun JVMs. diff --git a/java/org/apache/catalina/core/LocalStrings_es.properties b/java/org/apache/catalina/core/LocalStrings_es.properties index 089e4c8..13dcc69 100644 --- a/java/org/apache/catalina/core/LocalStrings_es.properties +++ b/java/org/apache/catalina/core/LocalStrings_es.properties @@ -85,21 +85,9 @@ defaultInstanceManager.restrictedFiltersResource=No se ha hallado el fichero de defaultInstanceManager.restrictedListenersResources=No se ha hallado el fichero de propiedades restringidas de escuchadores defaultInstanceManager.restrictedServletsResource=No se ha hallado el fichero de propiedades restringidas de servlets -fastEngineMapper.alreadyStarted=Ya se ha arrancado el FastEngineMapper {0} -fastEngineMapper.notStarted=No se ha arrancado aún el FastEngineMapper {0} - filterChain.filter=La ejecución del Filtro lanzó una excepción filterChain.servlet=La ejecución del Servlet lanzó una excepción -httpContextMapper.container=Este Contenedor no es un StandardContext - -httpEngineMapper.container=Este Contenedor no es un StandardEngine - -httpHostMapper.container=Esta Contenedor no es una StandardHost - -interceptorValve.alreadyStarted=Ya ha sido arrancada la InterceptorValve -interceptorValve.notStarted=Aún no ha sido arrancada la InterceptorValve - jreLeakListener.authPolicyFail=Error mientras intentaba prevenir fallos de memoria en javax.security.auth.Policy class jreLeakListener.gcDaemonFail=No pude disparar la creación del hilo Daemon GC durante el arranque de Tomcat para prevenir posibles fallos de memoria. Esto es lo esperado en JVMs no Sun. jreLeakListener.jarUrlConnCacheFail=No pude desactivar la caché de conexión URL de Jar por defecto diff --git a/java/org/apache/catalina/core/LocalStrings_fr.properties b/java/org/apache/catalina/core/LocalStrings_fr.properties index 1807100..089ed31 100644 --- a/java/org/apache/catalina/core/LocalStrings_fr.properties +++ b/java/org/apache/catalina/core/LocalStrings_fr.properties @@ -31,24 +31,23 @@ applicationRequest.badRequest=La requête n''est pas une "javax.servlet.ServletR applicationResponse.badParent=Impossible de trouver une implémentation réponse parente (parent response) applicationResponse.badResponse=La réponse n''est pas une "javax.servlet.ServletResponseWrapper" +asyncContextImpl.asyncDispachError=Erreur lors d'un dispatch asynchrone +asyncContextImpl.dispatchingStarted=Une opération de dispatch asynchrone a déjà été appelée, plusieurs dispatch au cours d'un même cycle asynchrone n'est pas autorisé +asyncContextImpl.noAsyncDispatcher=Le Servlet dispatcher retourné par le ServletContext ne supporte pas de dispatch asynchrone +asyncContextImpl.onCompleteError=L''appel à onComplete() a échoué pour l''écouteur de type [{0}] +asyncContextImpl.onErrorError=L''appel à onError() a échoué pour l''écouteur de type [{0}] +asyncContextImpl.onStartAsyncError=L''appel à onStartAsync() a échoué pour l''écouteur de type [{0}] +asyncContextImpl.onTimeoutError=L''appel à onTimeout() a échoué pour l''écouteur de type [{0}] +asyncContextImpl.request.ise=Il est illégal d'appeler getRequest() après que complete() ou une autre des méthodes dispatch() ait été appelé +asyncContextImpl.requestEnded=La requête associée avec l'AsyncContext est déjà terminée +asyncContextImpl.response.ise=Il est illégal d'appeler getResponse() après que complete() ou n'importe laquelle des méthodes de dispatch a été appelée + containerBase.alreadyStarted=Le conteneur {0} a déjà été démarré containerBase.notConfigured=Aucune Valve basique (basic valve) n''a été configurée containerBase.notStarted=Le conteneur {0} n''a pas été démarré -fastEngineMapper.alreadyStarted=le "FastEngineMapper" {0} a déjà été démarré -fastEngineMapper.notStarted=Le "FastEngineMapper" {0} n''a pas encore été démarré - -filterChain.filter=L''exécution du filtre (Filter) a lancé une exception -filterChain.servlet=L''exécution de la servlet a lancé une exception - -httpContextMapper.container=Ce conteneur n''est pas un "StandardContext" - -httpEngineMapper.container=Ce conteneur n''est pas un "StandardEngine" - -httpHostMapper.container=Ce conteneur n''est pas un "StandardHost" - -interceptorValve.alreadyStarted=La valve d''interception (InterceptorValve) a déjà été démarrée -interceptorValve.notStarted=La valve d''interception (InterceptorValve) n''a pas encore été démarrée +filterChain.filter=L'exécution du filtre (Filter) a lancé une exception +filterChain.servlet=L'exécution de la servlet a lancé une exception naming.bindFailed=Echec lors du liage à l''objet: {0} naming.invalidEnvEntryType=L''entrée environnement {0} a un type invalide diff --git a/java/org/apache/catalina/core/LocalStrings_ja.properties b/java/org/apache/catalina/core/LocalStrings_ja.properties index 50e4632..b454bf5 100644 --- a/java/org/apache/catalina/core/LocalStrings_ja.properties +++ b/java/org/apache/catalina/core/LocalStrings_ja.properties @@ -36,21 +36,9 @@ containerBase.alreadyStarted=コンテナ {0} は既に起動されています containerBase.notConfigured=基本バルブが設定されていません containerBase.notStarted=コンテナ {0} はまだ起動されていません -fastEngineMapper.alreadyStarted=FastEngineMapper {0} は既に起動されています -fastEngineMapper.notStarted=FastEngineMapper {0} はまだ起動されていません - filterChain.filter=フィルタの実行により例外を投げました filterChain.servlet=サーブレットの実行により例外を投げました -httpContextMapper.container=このコンテナはStandardContextではありません - -httpEngineMapper.container=このコンテナはStandardEngineではありません - -httpHostMapper.container=このコンテナはStandardHostではありません - -interceptorValve.alreadyStarted=InterceptorValveは既に起動されています -interceptorValve.notStarted=InterceptorValveはまだ起動されていません - naming.bindFailed=オブジェクトのバインドに失敗しました: {0} naming.invalidEnvEntryType=環境エントリ {0} は無効な型を持っています naming.invalidEnvEntryValue=環境エントリ {0} は無効な値を持っています diff --git a/java/org/apache/catalina/security/SecurityClassLoad.java b/java/org/apache/catalina/security/SecurityClassLoad.java index ab74100..0ca8205 100644 --- a/java/org/apache/catalina/security/SecurityClassLoad.java +++ b/java/org/apache/catalina/security/SecurityClassLoad.java @@ -14,8 +14,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - - package org.apache.catalina.security; /** @@ -24,12 +22,11 @@ package org.apache.catalina.security; * RuntimePermission does not trigger an AccessControlException. * * @author Glenn L. Nielsen - * @author Jean-Francois Arcand */ public final class SecurityClassLoad { - public static void securityClassLoad(ClassLoader loader) - throws Exception { + public static void securityClassLoad(ClassLoader loader) throws Exception { + if( System.getSecurityManager() == null ){ return; @@ -49,16 +46,15 @@ public final class SecurityClassLoad { } - private static final void loadCorePackage(ClassLoader loader) - throws Exception { + private static final void loadCorePackage(ClassLoader loader) throws Exception { final String basePackage = "org.apache.catalina.core."; loader.loadClass(basePackage + "AccessLogAdapter"); loadAnonymousInnerClasses(loader, basePackage + "ApplicationContextFacade"); loader.loadClass(basePackage + "ApplicationDispatcher$PrivilegedForward"); loader.loadClass(basePackage + "ApplicationDispatcher$PrivilegedInclude"); loader.loadClass(basePackage + "AsyncContextImpl"); + loader.loadClass(basePackage + "AsyncContextImpl$AsyncRunnable"); loader.loadClass(basePackage + "AsyncContextImpl$DebugException"); - loadAnonymousInnerClasses(loader, basePackage + "AsyncContextImpl"); loader.loadClass(basePackage + "AsyncListenerWrapper"); loader.loadClass(basePackage + "ContainerBase$PrivilegedAddChild"); loadAnonymousInnerClasses(loader, basePackage + "DefaultInstanceManager"); @@ -68,28 +64,20 @@ public final class SecurityClassLoad { } - private static final void loadLoaderPackage(ClassLoader loader) - throws Exception { + private static final void loadLoaderPackage(ClassLoader loader) throws Exception { final String basePackage = "org.apache.catalina.loader."; - loader.loadClass - (basePackage + - "ResourceEntry"); - loader.loadClass - (basePackage + - "WebappClassLoaderBase$PrivilegedFindResourceByName"); + loader.loadClass(basePackage + "ResourceEntry"); + loader.loadClass(basePackage + "WebappClassLoaderBase$PrivilegedFindResourceByName"); } - private static final void loadRealmPackage(ClassLoader loader) - throws Exception { + private static final void loadRealmPackage(ClassLoader loader) throws Exception { final String basePackage = "org.apache.catalina.realm."; - loader.loadClass - (basePackage + "LockOutRealm$LockRecord"); + loader.loadClass(basePackage + "LockOutRealm$LockRecord"); } - private static final void loadServletsPackage(ClassLoader loader) - throws Exception { + private static final void loadServletsPackage(ClassLoader loader) throws Exception { final String basePackage = "org.apache.catalina.servlets."; // Avoid a possible memory leak in the DefaultServlet when running with // a security manager. The DefaultServlet needs to load an XML parser @@ -100,8 +88,7 @@ public final class SecurityClassLoad { } - private static final void loadSessionPackage(ClassLoader loader) - throws Exception { + private static final void loadSessionPackage(ClassLoader loader) throws Exception { final String basePackage = "org.apache.catalina.session."; loader.loadClass(basePackage + "StandardSession"); loadAnonymousInnerClasses(loader, basePackage + "StandardSession"); @@ -109,8 +96,7 @@ public final class SecurityClassLoad { } - private static final void loadUtilPackage(ClassLoader loader) - throws Exception { + private static final void loadUtilPackage(ClassLoader loader) throws Exception { final String basePackage = "org.apache.catalina.util."; loader.loadClass(basePackage + "Enumerator"); loader.loadClass(basePackage + "ParameterMap"); @@ -118,15 +104,13 @@ public final class SecurityClassLoad { } - private static final void loadValvesPackage(ClassLoader loader) - throws Exception { - final String basePackage = "org.apache.catalina.valves."; - loader.loadClass(basePackage + "AccessLogValve$3"); - } + private static final void loadValvesPackage(ClassLoader loader) throws Exception { + final String basePackage = "org.apache.catalina.valves."; + loader.loadClass(basePackage + "AccessLogValve$3"); + } - private static final void loadCoyotePackage(ClassLoader loader) - throws Exception { + private static final void loadCoyotePackage(ClassLoader loader) throws Exception { final String basePackage = "org.apache.coyote."; // Java 6 compiler creates helper *$1 classes because we use switch with an enum loadAnonymousInnerClasses(loader, basePackage + "http11.AbstractHttp11Processor"); @@ -137,18 +121,16 @@ public final class SecurityClassLoad { loader.loadClass(basePackage + "http11.Constants"); // Make sure system property is read at this point Class<?> clazz = loader.loadClass(basePackage + "Constants"); - clazz.newInstance(); + clazz.getConstructor().newInstance(); } - private static final void loadJavaxPackage(ClassLoader loader) - throws Exception { + private static final void loadJavaxPackage(ClassLoader loader) throws Exception { loader.loadClass("javax.servlet.http.Cookie"); } - private static final void loadConnectorPackage(ClassLoader loader) - throws Exception { + private static final void loadConnectorPackage(ClassLoader loader) throws Exception { final String basePackage = "org.apache.catalina.connector."; loader.loadClass(basePackage + "RequestFacade$GetAttributePrivilegedAction"); loader.loadClass(basePackage + "RequestFacade$GetParameterMapPrivilegedAction"); @@ -172,8 +154,8 @@ public final class SecurityClassLoad { loadAnonymousInnerClasses(loader, basePackage + "Response"); } - private static final void loadTomcatPackage(ClassLoader loader) - throws Exception { + + private static final void loadTomcatPackage(ClassLoader loader) throws Exception { final String basePackage = "org.apache.tomcat."; // buf loader.loadClass(basePackage + "util.buf.B2CConverter"); @@ -217,4 +199,3 @@ public final class SecurityClassLoad { } } } - --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org