You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Daniel Mikusa <dm...@gopivotal.com> on 2013/08/29 22:09:02 UTC

Tomcat 8 Resources Question

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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Tomcat 8 Resources Question

Posted by Daniel Mikusa <dm...@gopivotal.com>.
On Sep 6, 2013, at 10:20 AM, Mark Thomas <ma...@apache.org> wrote:

> On 06/09/2013 11:18, Mark Thomas wrote:
>> On 29/08/2013 21:09, Daniel Mikusa wrote:
>> <snip/>
>> 
>>> I believe that I'm setting the internalPath attribute correctly, but it doesn't seem to be taking.  Any thoughts?
>> 
>> I plan to start looking at this today.
> 
> That was embarrassing. No way that was ever going to work when
> configured in context.xml despite all the unit tests.
> 
> I've fixed various issues with the no-arg constructors that the digester
> requires, add some unit tests for that and also fixed the issue that
> internalPath wasn't configurable despite that the docs said.
> 
> You should be good to go now.
> 
> Mark

Thanks for the fix!  Working great now.

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


Re: Tomcat 8 Resources Question

Posted by Mark Thomas <ma...@apache.org>.
On 06/09/2013 11:18, Mark Thomas wrote:
> On 29/08/2013 21:09, Daniel Mikusa wrote:
> <snip/>
> 
>> I believe that I'm setting the internalPath attribute correctly, but it doesn't seem to be taking.  Any thoughts?
> 
> I plan to start looking at this today.

That was embarrassing. No way that was ever going to work when
configured in context.xml despite all the unit tests.

I've fixed various issues with the no-arg constructors that the digester
requires, add some unit tests for that and also fixed the issue that
internalPath wasn't configurable despite that the docs said.

You should be good to go now.

Mark


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


Re: Tomcat 8 Resources Question

Posted by Mark Thomas <ma...@apache.org>.
On 29/08/2013 21:09, Daniel Mikusa wrote:
<snip/>

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

I plan to start looking at this today.

Mark


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