ColdFusion Инициализация метода объекта Java, который требует внешнего файла конфигурации
Я бился головой об этом некоторое время, не могу найти достойных ответов или объяснений для этих ошибок. Я использую сторонний JAR-файл "PropHandler.jar". Я пытаюсь вызвать метод getMessageList, он принимает 3 аргумента и требует файл конфигурации.
<cfset configFile = 'C:\data\getMsgListCONFIG.xml'>
<cfset Obj = createObject("java","client.PropHandler") />
<cfdump var="#Obj#">
Все хорошо, мой дамп возвращает список методов. Теперь мне нужно получить свой файл конфигурации для метода и передать мои аргументы, нет любви, я попробовал это:
<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)>
Все возвращают ту же ошибку:
Исключение экземпляров объекта
Возникла исключительная ситуация при создании экземпляра объекта Java. Класс не должен быть интерфейсом или абстрактным классом. Если у класса есть конструктор, который принимает аргумент, вы должны явно вызвать конструктор, используя метод init (args). Ошибка: client.PropertyHandler
Когда я не отправляю 3 аргумента, я получаю ошибку метода not found, если я не отправляю init, я получаю ту же ошибку.
Итак, у меня нет большого опыта работы с JAVA, и я не понимаю сообщение об ошибке. Я могу нормально использовать JAR при вызове из командной строки или даже при выполнении с файлом BAT, но когда я это делаю, я не могу получить массив XML SOAP, возвращенный мне...
Из Java Doc:
PropertyHandler
public PropertyHandler(java.lang.String propFile) throws java.lang.Exception
Использует файл свойств для установки всех программных переменных. Этот файл свойств относится ко второму файлу свойств, который идентифицирует идентификатор пользователя и данные файла безопасности.
Параметры:
propFile
- XML-файл свойствБроски:
java.lang.Exception
getMessageList
public services.[...].GetResponseTypeDef getMessageList(java.lang.String par1, java.lang.String comp_Op1, java.lang.String parValue1 )
Переопределяет X_Properties, чтобы вернуть список метаданных о каждом сообщении, которое соответствует запросу, определенному параметрами функции.
Параметры:
par1
- один из параметров enumcomp_Op1
- Одно из перечислений CompOpparValue1
- значение для сравненияВозвращает:
Критерии запроса встречи списка сообщений метаданных Возвращает ноль, если возникла исключительная ситуация, а не выбрасывающая исключение.
1 ответ
Структура вызова работает как:
<cfset Obj = createObject("java","client.PropHandler") />
<cfset Meth = Obj.init(argfile).getMessageList(arg1,arg2,arg3)>
argfile
Переменная - это путь к файлу конфигурации XML, и он также ссылается на другой файл конфигурации, используя относительный путь. Я нашел эту ошибку из трассировки стека (ниже), как только путь был изменен на абсолютный внутри argfile
ошибка была устранена.
Трассировка стека в cf_getMsgs2ecfm497532872.runPage(E:\Inetpub\wwwroot_getMsgs.cfm:24) в cf_getMsgs2ecfm497532872.runPage(E:\Inetpub\wwwroot_getMsgs.cfm:24)
java.lang.reflect. java.lang.reflect.Constructor.newInstance(Constructor.java:513) в coldfusion.runtime.java.JavaProxy.CreateObject(JavaProxy.java:156) в coldfusion.runtime.java.JavaProxy.invoke(JavaProxy.java:63) at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2272) в cf_getMsgs2ecfm497532872.runPage(E:\Inetpub\wwwroot_getMsgs.cfm:24) в coldfusion.runtime.cfJtage.fj (fjp).lang.IncludeTag.doStartTag(IncludeTag.java:370) в coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65) в coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:279) в coldfusion.filter.invoke(RequestMonitorFilter.java:48) a coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) в coldfusion.filter.PathFilter.invoke(PathFilter.java:86) в coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70) в coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:74) в coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) в coldfusion.filter.BrowserFilter.invoke(BrowserFilter.javaoinfilterFilter.filter.filter.filter.filter.filter.filter.filter. coldterFilterFilter.j.java:46) по адресу coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) по адресу coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) по адресу coldfusion.CfmServlet.service(CfmServlet):.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) в jrun.servlet.FilterChain.doFilter(FilterChain.java:86) в coldfusion.monitor.event.MonitoringServletFilter.doFilter(Monitoring)ootraflet.BootstrapFilter.doFilter(BootstrapFilter.java:46) в jrun.servlet.FilterChain.doFilter(FilterChain.java:94) в jrun.servlet.FilterChain.service(FilterChain.java:101) в jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106) в jrun.servkJ (JRunInvokerChain.java:42) в jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286) в jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java! java:203) в jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320) в jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) в потоке юр..java:266) at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66) Причина: java.io.FileNotFoundException:.. \ data \ APIproperties.xml (система не может найти указанный путь) в java.io.FileInputStream.open(собственный метод) в java.io.FileInputStream.(FileInputStream.java:106) в java.io.FileInputStream.(FileInputStream.java:66) в client.PropertyHandler.(PropertyHandler.java:133)
Спасибо @Leigh и @imthepitts