Ah ha - I've sorted it out! I couldn't figure out what would be different from adding resources on the buildpath (working) vs the classpath (not working). But, what was going on was that Eclipse was managing the order of the classpath differently in each case. When I added the resource folder to my buildpath, it moves it "up" the classpath so that these resources are used before things in my maven dependencies. As a result, FileLocater.locateFile is able to find the file from the folder on my system.
When I was adding the folder via the classpath - it was always falling to the "bottom" of dependencies (I never thought to move it up until I actual stepped through the FileLocator...) as a result, FileLocator (via the class loader) finds the path in one of the maven dependencies first: ctakes-resources-umls2011ab-3.1.1.jar. The LocateOnClasspath does throw the hierarchical UI exception, which is caught and ctakes tries to "locateExplicitly" which fails because the path is in fact a classpath resource. Hopefully that helps someone else out! Also I'm curious the right way to be managing resources - I arrived at my mish-mash because I started with the standalone and then started picking with the API. Thanks again for the help! -Steve THIS MESSAGE IS INTENDED FOR THE USE OF THE PERSON TO WHOM IT IS ADDRESSED. IT MAY CONTAIN INFORMATION THAT IS PRIVILEGED, CONFIDENTIAL AND EXEMPT FROM DISCLOSURE UNDER APPLICABLE LAW. If you are not the intended recipient, your use of this message for any purpose is strictly prohibited. If you have received this communication in error, please delete the message and notify the sender so that we may correct our records. -----Original Message----- From: Steve Hookway [mailto:shook...@cra.com] Sent: Tuesday, September 10, 2013 12:43 PM To: dev@ctakes.apache.org Subject: RE: managing ctakes resources on classpath Hello Again, Ok - I think I've straightened out some version issues (and resolved the hierarchical URI loading issue) but now I'm having a problem getting Lucene to behave nicely when resources are on the classpath vs. the buildpath. An update: I've checked out the latest code - and am pointing to the AggregatePlaintextUMLSProcessor.xml in the clinical pipeline. Although (to complicate things a little), I'm NOT building using the checked out code - but using mvn to add a dependency on clinical pipeline 3.1.0. I have my old 3.0.1 resources folder which I've clobbered with the 3.1.0 dependencies. After running a few times and picking up "not founds" I've added enough of the resources from the various checked out 3.1.0 projects into the resources folder to get up and running. When I run things with the resources directory on the buildpath everything works as expected. But, when I run with the resources directory on the classpath instead, I get a FileNotFoundException: org.apache.uima.resource.ResourceInitializationException at org.apache.ctakes.core.resource.LuceneIndexReaderResourceImpl.load(LuceneIndexReaderResourceImpl.java:80) at org.apache.uima.resource.impl.ResourceManager_impl.registerResource(ResourceManager_impl.java:603) at org.apache.uima.resource.impl.ResourceManager_impl.initializeExternalResources(ResourceManager_impl.java:442) ........ Caused by: java.io.FileNotFoundException: org/apache/ctakes/dictionary/lookup/rxnorm_index at org.apache.ctakes.core.resource.FileLocator.locateExplicitly(FileLocator.java:93) If I look in my resource folder I do in fact have a matching directory that's populated with a number of files. Any insight would be much appreciated, Steve THIS MESSAGE IS INTENDED FOR THE USE OF THE PERSON TO WHOM IT IS ADDRESSED. IT MAY CONTAIN INFORMATION THAT IS PRIVILEGED, CONFIDENTIAL AND EXEMPT FROM DISCLOSURE UNDER APPLICABLE LAW. If you are not the intended recipient, your use of this message for any purpose is strictly prohibited. If you have received this communication in error, please delete the message and notify the sender so that we may correct our records. -----Original Message----- From: Steve Hookway [mailto:shook...@cra.com] Sent: Tuesday, September 10, 2013 9:52 AM To: dev@ctakes.apache.org Subject: RE: managing ctakes resources on classpath Hi Pei, Thanks for the help! I'm using version 3.0.1 of the resources and am grabbing my dependencies (using maven central) from ctakes-clinical-pipeline version 3.0.0-incubating. I wound up hosting versions of zoner,med-facts, and jcarafe myself; I found a ticket that made it seem like this is fixed in the latest release, but I couldn't get the stuff from maven central working without adding these dependencies manually. I'm using: analysisEngine = AnalysisEngineFactory.createAnalysisEngineFromPath(analysisEnginePath); And the Path points to the ctakes-clinical-pipeline\\desc\\analysis_engine\\AggregatePlaintextUMLSProcessor.xml It's interesting to me that when running from Eclipse adding the resources to the buildpath vs. classpath makes a difference - I'm not sure what tricks Eclipse uses here to transfer buildpath entries to the classpath during runtime (that threats the resources differently).... Hopefully this is just a configuration problem! Thanks again for the help, Steve THIS MESSAGE IS INTENDED FOR THE USE OF THE PERSON TO WHOM IT IS ADDRESSED. IT MAY CONTAIN INFORMATION THAT IS PRIVILEGED, CONFIDENTIAL AND EXEMPT FROM DISCLOSURE UNDER APPLICABLE LAW. If you are not the intended recipient, your use of this message for any purpose is strictly prohibited. If you have received this communication in error, please delete the message and notify the sender so that we may correct our records. -----Original Message----- From: Pei Chen [mailto:chen...@apache.org] Sent: Tuesday, September 10, 2013 9:34 AM To: dev@ctakes.apache.org Subject: Re: managing ctakes resources on classpath Hi Steve, The URI is not hierarchical is most likely caused by the code trying to use the resources/models, but they are inside a jar instead of unpacked. -Which version of cTAKES are you using? -Do you happen to have the resource file name that caused the above? --Pei On Mon, Sep 9, 2013 at 9:48 PM, Steve Hookway <shook...@cra.com> wrote: > Hi all, > > I'm trying to integrate ctakes into a webapp and am running into > issues getting the resources to load correctly. In a standalone > version of the app, if I add the resources folder to the buildpath (as > described in the install directions) everything works as expected. > However, if I add the folder to the project classpath instead, I get a > URI is not hierarchical exception from FileResourceImpl.load: > > java.lang.IllegalArgumentException: URI is not hierarchical > at java.io.File.<init>(File.java:392) > at > org.apache.ctakes.core.resource.FileResourceImpl.load(FileResourceImpl.java:44) > at > org.apache.uima.resource.impl.ResourceManager_impl.registerResource(Re > sourceManager_impl.java:603) > > Similarly if I try and run from a webapp - setting up tomcat's > classpath to include the ctakes resource folder, I get the same URI is > not hierarchical error. I found this bug report: > https://issues.apache.org/jira/browse/CTAKES-89 but it suggests > adding the resource folder to my classpath, which isn't doing the trick. > > If you can steer me in the right direction, I'd really appreciate it. > > Thanks, > Steve > > > > > THIS MESSAGE IS INTENDED FOR THE USE OF THE PERSON TO WHOM IT IS > ADDRESSED. IT MAY CONTAIN INFORMATION THAT IS PRIVILEGED, CONFIDENTIAL > AND EXEMPT FROM DISCLOSURE UNDER APPLICABLE LAW. If you are not the > intended recipient, your use of this message for any purpose is strictly > prohibited. > If you have received this communication in error, please delete the > message and notify the sender so that we may correct our records. > > > >