I'm playing with the new resources feature in Tomcat 8...

  https://tomcat.apache.org/tomcat-8.0-doc/config/resources.html

and having a little trouble.

First, I have the following context file for my application 
(conf/Catalina/localhost/<app>.xml).

<?xml version='1.0' encoding='utf-8'?>
<Context 
docBase="/Users/danielmikusa/Code/Workspaces/sts33/tomcat-8-demos/target/tomcat-8-demos"
 reloadable="true">
    <Resources>
        <PreResources 
className="org.apache.catalina.webresources.DirResourceSet" 
base="${home}/Downloads" webAppMount="/Downloads" internalPath="/" />
    </Resources>
</Context>

However this doesn't seem to be working.  I'm getting this error in the logs.

29-Aug-2013 15:53:18.064 SEVERE [localhost-startStop-1] 
org.apache.catalina.startup.ContextConfig.processContextConfig Parse error in 
context.xml for /tomcat-8-demos
 org.xml.sax.SAXParseException; systemId: 
file:/Users/danielmikusa/Code/OpenSource/apache-tomcat-trunk/output/build/conf/Catalina/localhost/tomcat-8-demos.xml;
 lineNumber: 4; columnNumber: 152; Error at (4, 152) : null
        at 
org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:1939)
        at 
org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:1971)
        at 
org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1179)
        at 
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
        at 
com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
        at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1303)
        at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2717)
        at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
        at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
        at 
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
        at 
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
        at 
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
        at 
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
        at 
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
        at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1449)
        at 
org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:542)
        at 
org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:501)
        at 
org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:730)
        at 
org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:317)
        at 
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at 
org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
        at 
org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:110)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
        at 
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726)
        at 
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:702)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:698)
        at 
org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:574)
        at 
org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1724)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.IllegalArgumentException
        at 
org.apache.catalina.webresources.AbstractResourceSet.checkPath(AbstractResourceSet.java:39)
        at 
org.apache.catalina.webresources.AbstractResourceSet.checkInternalPath(AbstractResourceSet.java:44)
        at 
org.apache.catalina.webresources.AbstractFileResourceSet.<init>(AbstractFileResourceSet.java:35)
        at 
org.apache.catalina.webresources.DirResourceSet.<init>(DirResourceSet.java:41)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at java.lang.Class.newInstance(Class.java:374)
        at 
org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:117)
        at 
org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1176)
        ... 32 more

When I debug into it, it appears to be calling DirResourceSet's no-arg 
constructor, which in turn calls AbstractFileResourceSet's constructor with one 
argument an empty string.  AbstractFileResourceSet's constructor then call's 
checkInternalPath and then checkPath which has the following check.

    protected final void checkPath(String path) {
        if (path == null || path.length() == 0 || path.charAt(0) != '/') {
            throw new IllegalArgumentException();
        }
    }

Because path is "", this throws an IllegalArgumentException.

I believe that I'm setting the internalPath attribute correctly, but it doesn't 
seem to be taking.  Any thoughts?

Thanks

Dan
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to