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: [email protected]
For additional commands, e-mail: [email protected]