ColdFusion初始化需要外部配置文件的Java对象方法

我一直在敲打这个问题一段时间,似乎找不到任何体面的答案或解释这些错误.我正在使用第三方JAR“PropHandler.jar”

我试图调用getMessageList方法,它接受3个args并需要一个配置文件.

<cfset configFile = 'C:\data\getMsgListCONFIG.xml'>
<cfset Obj = createObject("java","client.PropHandler") />
<cfdump var="#Obj#">

一切都很好,我的转储返回一个方法列表.现在,我需要将我的配置文件添加到方法并传入我的args,没有爱在这里,我试过这个:

<cfset x = Obj.getMessageList.init(configFile)>

<cfset x = Obj.getMessageList().init(configFile)>

<cfset x = Obj.getMessageList('identifier', 'greaterthan', '2012-05-18T12:00:00-04:00').init(configFile)>

甚至尝试通过创建对象进行初始化:

<cfset Obj = createObject("java","client.PropHandler").getMessageList('identifier', 'greaterthan', '2012-05-18T12:00:00-04:00').init(configFile)>

全部返回相同的错误:

Object Instantiation Exception

An exception occurred while instantiating a Java object. The class
must not be an interface or an abstract class. If the class has a
constructor that accepts an argument, you must call the constructor
explicitly using the init(args) method. Error : client.PropertyHandler

当我没有发送3个args我得到一个方法未找到错误,如果我不发送init我得到相同的错误.

所以,我没有很多JAVA的经验,我不明白错误信息.从命令行调用时,甚至在使用BAT文件执行时,我都可以使用JAR,但是当我这样做时,我无法将XML SOAP数组返回给我…

来自Java Doc:

PropertyHandler

public PropertyHandler(java.lang.String propFile)
throws java.lang.Exception

Uses a Property File to set up all program variables. This Property
File refers to a second Property File that identifies user Id and
security file data.

Parameters:

  • propFile – XML file of Properties

Throws:

  • java.lang.Exception

getMessageList

06005

Overrides X_Properties to returns a list of metadata about each
message that meets the query defined by the function parameters.

Parameters:

  • par1 – One of Parameter enum
  • comp_Op1 – One of CompOp enum
  • parValue1 – a value for comparison

Returns:

metadata message list meeting query criteria Returns null if an
exception is encountered instead of throwing an exception.

最佳答案 呼叫的结构如下:

<cfset Obj = createObject("java","client.PropHandler") />   
<cfset Meth = Obj.init(argfile).getMessageList(arg1,arg2,arg3)>

argfile变量是XML配置文件的路径,它还使用相对路径引用另一个配置文件.一旦路径在argfile中更改为绝对,错误就解决了,我从堆栈跟踪(下面)中发现了这个错误.

Stack Trace at
cf_getMsgs2ecfm497532872.runPage(E:\Inetpub\wwwroot_getMsgs.cfm:24)
at
cf_getMsgs2ecfm497532872.runPage(E:\Inetpub\wwwroot_getMsgs.cfm:24)

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:156)
at coldfusion.runtime.java.JavaProxy.invoke(JavaProxy.java:63) at
coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2272) at
cf_getMsgs2ecfm497532872.runPage(E:\Inetpub\wwwroot_getMsgs.cfm:24)
at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:196) at
coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:370) at
coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65) at
coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:279)
at
coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48)
at
coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
at coldfusion.filter.PathFilter.invoke(PathFilter.java:86) at
coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70) at
coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:74)
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.CfmServlet.service(CfmServlet.java:175) 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$DownstreamMetrics.invokeRunnable(ThreadPool.java:320)
at
jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
at
jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266)
at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66) Caused by:
java.io.FileNotFoundException: ..\data\APIproperties.xml (The system
cannot find the path specified)
at
java.io.FileInputStream.open(Native Method) at
java.io.FileInputStream.(FileInputStream.java:106) at
java.io.FileInputStream.(FileInputStream.java:66) at
client.PropertyHandler.(PropertyHandler.java:133)

谢谢@Leigh和@imthepitts

点赞