Hi,
I'm trying to extract text from various files using Tika and I am having an issue loading the jar with Javaloader. If the Tika jar is put in the CF classpath, and loaded using createObject, it works perfectly. When loading the same jar using Javaloader I get an error when trying to instantiate a class. I have tested this on CF9, both standard and multiserver installs.
I have created a test case to demo this issue which is available here:
http://dl.dropbox.com/u/1647505/tika.zip The zip file includes Javaloader and the Tika jar and can be unzipped under any webroot and executed as is.
Here is the code I am trying to run. It should simply extract the text from the PDF and dump it to the screen, however it does not make it past the line "tika.init()". If I take the identical code, put the jar on the classpath and change tika = javaloader.create("org.apache.tika.Tika"); to tika = createObject("java","org.apache.tika.Tika"); then it works.
<cfscript>
// create instance of javaloader
javaloader = createObject("component","javaloader.JavaLoader").init([
getDirectoryFromPath(getCurrentTemplatePath()) & "tika-app-1.0.jar"
]);
// grab a handle on the file
f = createObject("java","java.io.File").init( getDirectoryFromPath(getCurrentTemplatePath()) & "example.pdf" );
// create instance of tika
tika = javaloader.create("org.apache.tika.Tika");
tika = tika.init();
// parse it
content = tika.parseToString(f);
// output results
writeDump(var = content, label = "Content");
</cfscript>
And here is the error and stack trace.
Object instantiation exception.
An exception occurred while instantiating a Java object. The class must not be an interface or an abstract class. Error: ''.
The error occurred in /Users/sean/Sites/_scribble/tika/index.cfm: line 13
11 : // create instance of tika
12 : tika = javaloader.create("org.apache.tika.Tika");
13 : tika = tika.init();
14 :
15 : // parse it
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at coldfusion.runtime.java.JavaProxy.CreateObject(JavaProxy.java:166)
at coldfusion.runtime.java.JavaProxy.invoke(JavaProxy.java:80)
at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2360)
at cfindex2ecfm848441849.runPage(/Users/sean/Sites/_scribble/tika/index.cfm:13)
at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:231)
at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:416)
at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:381)
at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48)
at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
at coldfusion.filter.PathFilter.invoke(PathFilter.java:94)
at coldfusion.filter.LicenseFilter.invoke(LicenseFilter.java:27)
at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70)
at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46)
at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62)
at coldfusion.CfmServlet.service(CfmServlet.java:200)
at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
at jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
at jrun.servlet.FilterChain.service(FilterChain.java:101)
at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)
at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)
at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
Caused by: java.lang.NullPointerException
at org.apache.tika.mime.MimeTypesFactory.create(MimeTypesFactory.java:134)
at org.apache.tika.mime.MimeTypes.getDefaultMimeTypes(MimeTypes.java:455)
at org.apache.tika.config.TikaConfig.<init>(TikaConfig.java:145)
at org.apache.tika.config.TikaConfig.getDefaultConfig(TikaConfig.java:237)
at org.apache.tika.Tika.<init>(Tika.java:93)
... 37 more