From: pero Date: Sat, 3 Jul 2010 23:02:46 +0000 (+0000) Subject: Fix NPE and add small test case to check VirtualWebappLoader. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=ab754d92cbe9632d7422159da2ec9b76c97568ce;p=tomcat7.0 Fix NPE and add small test case to check VirtualWebappLoader. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@960284 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/loader/WebappLoader.java b/java/org/apache/catalina/loader/WebappLoader.java index 8ca465402..f5bcac311 100644 --- a/java/org/apache/catalina/loader/WebappLoader.java +++ b/java/org/apache/catalina/loader/WebappLoader.java @@ -483,9 +483,7 @@ public class WebappLoader extends LifecycleMBeanBase * such that the loaded classes should be reloaded? */ public boolean modified() { - - return (classLoader.modified()); - + return classLoader != null ? classLoader.modified() : false ; } @@ -493,7 +491,7 @@ public class WebappLoader extends LifecycleMBeanBase * Used to periodically signal to the classloader to release JAR resources. */ public void closeJARs(boolean force) { - if (classLoader !=null){ + if (classLoader !=null) { classLoader.closeJARs(force); } } diff --git a/test/org/apache/catalina/loader/TestVirtualWebappLoader.java b/test/org/apache/catalina/loader/TestVirtualWebappLoader.java new file mode 100644 index 000000000..4e3cdb7d2 --- /dev/null +++ b/test/org/apache/catalina/loader/TestVirtualWebappLoader.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.catalina.loader; + +import java.io.File; + +import org.apache.catalina.core.StandardContext; +import org.apache.catalina.startup.Tomcat; +import org.apache.catalina.startup.TomcatBaseTest; +import org.apache.naming.resources.FileDirContext; + +public class TestVirtualWebappLoader extends TomcatBaseTest { + + public void testModified() throws Exception { + WebappLoader loader = new WebappLoader(); + assertNull(loader.getClassLoader()); + assertFalse(loader.modified()); + } + + public void testStartInternal() throws Exception { + Tomcat tomcat = getTomcatInstance(); + File appDir = new File("test/webapp-3.0"); + // Must have a real docBase - just use temp + StandardContext ctx = + (StandardContext)tomcat.addContext("/", appDir.getAbsolutePath()); + + VirtualWebappLoader loader = new VirtualWebappLoader(); + + loader.setContainer(ctx); + ctx.setLoader(loader); + ctx.setResources(new FileDirContext()); + ctx.resourcesStart(); + File dir = new File("test/webapp-3.0-fragments/WEB-INF/lib"); + loader.setVirtualClasspath(dir.getAbsolutePath() + "/*.jar"); + loader.startInternal(); + String[] repos = loader.getRepositories(); + assertEquals(2,repos.length); + loader.stopInternal(); + // ToDo: Why doesn't remove repositories? + repos = loader.getRepositories(); + assertEquals(2, repos.length); + + // no leak + loader.startInternal(); + repos = loader.getRepositories(); + assertEquals(2,repos.length); + + // clear loader + ctx.setLoader(null); + // see tearDown()! + tomcat.start(); + } +}