Author: markt Date: Thu Nov 10 20:52:09 2016 New Revision: 1769191 URL: http://svn.apache.org/viewvc?rev=1769191&view=rev Log: Correctly generate URLs for resources located inside JARs that are themselves located inside a packed WAR file.
Added: tomcat/trunk/test/org/apache/catalina/webresources/TestAbstractArchiveResource.java (with props) Modified: tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java tomcat/trunk/java/org/apache/catalina/webresources/JarResource.java tomcat/trunk/java/org/apache/catalina/webresources/WarResource.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java?rev=1769191&r1=1769190&r2=1769191&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java (original) +++ tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java Thu Nov 10 20:52:09 2016 @@ -136,7 +136,7 @@ public abstract class AbstractArchiveRes @Override public URL getURL() { - String url = baseUrl + "!/" + resource.getName(); + String url = baseUrl + resource.getName(); try { return new URL(url); } catch (MalformedURLException e) { Modified: tomcat/trunk/java/org/apache/catalina/webresources/JarResource.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/JarResource.java?rev=1769191&r1=1769190&r2=1769191&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/webresources/JarResource.java (original) +++ tomcat/trunk/java/org/apache/catalina/webresources/JarResource.java Thu Nov 10 20:52:09 2016 @@ -32,7 +32,7 @@ public class JarResource extends Abstrac public JarResource(AbstractArchiveResourceSet archiveResourceSet, String webAppPath, String baseUrl, JarEntry jarEntry) { - super(archiveResourceSet, webAppPath, "jar:" + baseUrl, jarEntry, baseUrl); + super(archiveResourceSet, webAppPath, "jar:" + baseUrl + "!/", jarEntry, baseUrl); } Modified: tomcat/trunk/java/org/apache/catalina/webresources/WarResource.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/WarResource.java?rev=1769191&r1=1769190&r2=1769191&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/webresources/WarResource.java (original) +++ tomcat/trunk/java/org/apache/catalina/webresources/WarResource.java Thu Nov 10 20:52:09 2016 @@ -16,8 +16,6 @@ */ package org.apache.catalina.webresources; -import java.net.MalformedURLException; -import java.net.URL; import java.util.jar.JarEntry; import org.apache.juli.logging.Log; @@ -34,21 +32,7 @@ public class WarResource extends Abstrac public WarResource(AbstractArchiveResourceSet archiveResourceSet, String webAppPath, String baseUrl, JarEntry jarEntry) { - super(archiveResourceSet, webAppPath, "war:" + baseUrl, jarEntry, baseUrl); - } - - - @Override - public URL getURL() { - String url = getBaseUrl() + "*/" + getResource().getName(); - try { - return new URL(url); - } catch (MalformedURLException e) { - if (getLog().isDebugEnabled()) { - getLog().debug(sm.getString("fileResource.getUrlFail", url), e); - } - return null; - } + super(archiveResourceSet, webAppPath, "war:" + baseUrl + "*/", jarEntry, baseUrl); } Added: tomcat/trunk/test/org/apache/catalina/webresources/TestAbstractArchiveResource.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/TestAbstractArchiveResource.java?rev=1769191&view=auto ============================================================================== --- tomcat/trunk/test/org/apache/catalina/webresources/TestAbstractArchiveResource.java (added) +++ tomcat/trunk/test/org/apache/catalina/webresources/TestAbstractArchiveResource.java Thu Nov 10 20:52:09 2016 @@ -0,0 +1,77 @@ +/* + * 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.webresources; + +import java.io.File; + +import org.junit.Assert; +import org.junit.Test; + +import org.apache.catalina.Context; +import org.apache.catalina.WebResource; +import org.apache.catalina.core.StandardHost; +import org.apache.catalina.startup.Tomcat; +import org.apache.catalina.startup.TomcatBaseTest; + +public class TestAbstractArchiveResource extends TomcatBaseTest { + + @Test + public void testNestedJarGetURL() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + File docBase = new File("test/webresources/war-url-connection.war"); + Context ctx = tomcat.addWebapp("/test", docBase.getAbsolutePath()); + skipTldsForResourceJars(ctx); + + ((StandardHost) tomcat.getHost()).setUnpackWARs(false); + + tomcat.start(); + + WebResource webResource = + ctx.getResources().getClassLoaderResource("/META-INF/resources/index.html"); + + StringBuilder expectedURL = new StringBuilder("jar:war:"); + expectedURL.append(docBase.getAbsoluteFile().toURI().toURL().toString()); + expectedURL.append("*/WEB-INF/lib/test.jar!/META-INF/resources/index.html"); + + Assert.assertEquals(expectedURL.toString(), webResource.getURL().toString()); + } + + + @Test + public void testJarGetURL() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + File docBase = new File("test/webapp"); + Context ctx = tomcat.addWebapp("/test", docBase.getAbsolutePath()); + skipTldsForResourceJars(ctx); + + ((StandardHost) tomcat.getHost()).setUnpackWARs(false); + + tomcat.start(); + + WebResource webResource = + ctx.getResources().getClassLoaderResource("/META-INF/tags/echo.tag"); + + StringBuilder expectedURL = new StringBuilder("jar:"); + expectedURL.append(docBase.getAbsoluteFile().toURI().toURL().toString()); + expectedURL.append("WEB-INF/lib/test-lib.jar!/META-INF/tags/echo.tag"); + + Assert.assertEquals(expectedURL.toString(), webResource.getURL().toString()); + } + +} Propchange: tomcat/trunk/test/org/apache/catalina/webresources/TestAbstractArchiveResource.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1769191&r1=1769190&r2=1769191&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Thu Nov 10 20:52:09 2016 @@ -57,6 +57,10 @@ until after the WAR has been expanded to address the case where the Tomcat process terminates during the expansion. (markt) </fix> + <fix> + Correctly generate URLs for resources located inside JARs that are + themselves located inside a packed WAR file. (markt) + </fix> </changelog> </subsection> <subsection name="Tribes"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org