Как решить ClassCastException для java.util.ArrayList через WSDL CFC ColdFusion 9? - PullRequest
1 голос
/ 20 марта 2011

Надеюсь, что эта проблема не будет тратить ваше время.

Я использую Adobe Coldfusion 9 для создания CFC для взаимодействия с базой данных.Как правило, CFC может генерировать WSDL сам по себе.например:

http://localhost/services/employeeService.cfc?wsdl

WSDL сгенерирован хорошо.Но проблема была обнаружена, когда я попытался использовать службу данных Adobe Flash Builder 4 для создания класса обслуживания для подключения WSDL ColdFusion.

Если вы пытались вызвать удаленную функцию, которая возвращает тип примитивных данных как int или String,это работает правильно.

remote numeric function count() {
    return ormExecuteQuery("select Count(*) from employee")[1];
}

With return as primitive type, it works.

Но сложный тип данных, такой как, возвращает пользовательский класс, возвращенный без данных в поле.

remote fp_sandbox.cfc.employee function get(required numeric id ) {
    return EntityLoad("employee", arguments.id, true);
}

Return a complex data type object, but properties is empty.

Для массива, если удаленная функция, указанная в качестве массива ColdFusion, будет возвращать массив, но без данных в свойстве объекта:

remote Array function list() {
    return entityLoad("employee", {}, "idEmployee asc");
}

If return type is default Array, the children in array has no value in property.

, и если тип возвращаемого значения - код, генерируемый ORM, он выдаст исключение.Похоже, что ColdFusion пытается что-то разыграть.

remote fp_sandbox.cfc.employee[] function search(string q ) {
    // query creating.
    return ormExecuteQuery(hqlString, false, params);
}

StackTrace:

InvocationTargetException: при вызове операции произошла ошибка.Проверьте входные данные операции и попробуйте снова вызвать операцию.

Получено ответа:

soapenv: Server.userException coldfusion.xml.rpc.CFCInvocationException: [java.lang.ClassCastException: java.util.ArrayList] coldfusion.xml.rpc.CFCInvocationException: [java.lang..rpc.CFComponentSkeleton .__ cast (CFComponentSkeleton.java:409) в fp_sandbox.services.EmployeeService.search (D: \ home \ cashr.com \ wwwroot \ fp_sandbox \ services \ employeeService.cfc) в sun.reflect.AgnetСобственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.vo.eg.regв org.apache.axis.providers.java.RPCProvider.invokeMethod (RPCProvider.java:388) в org.apache.axis.providers.java.RPCProvider.processMessage (RPCProvider.java:283) в org.apache.axis.providers.java.JavaProvider.invoke (JavaProvider.java:323) в coldfusion.xml.rpc.CFCProvider.invoke (CFCProvider.java:54) в org.apache.axis.strategies.InvocationStrategy.visit (InvocationStrategy.java:32) в org.apache.axis.SimpleChain.doVisiting (SimpleChain.java:118) в орг.apache.axis.SimpleChain.invoke (SimpleChain.java:83) в org.apache.axis.handlers.soap.SOAPService.invoke (SOAPService.java:453) в org.apache.axis.server.AxisServer.invoke (AxisServer.Java: 281) в org.apache.axis.transport.http.AxisServlet.doPost (AxisServlet.java:699) в coldfusion.xml.rpc.CFCServlet.doAxisPost (CFCServlet.java:270) в coldfusion.filter.inis.(AxisFilter.java:43) в coldfusion.filter.ApplicationFilter.invoke (ApplicationFilter.java:356) в coldfusion.filter.RequestMonitorFilter.invoke (RequestMonitorFilter.java:48) в coldfusion.filter.MonitoringFilter.il.jterke (40) в сотрудничествеldfusion.filter.PathFilter.invoke (PathFilter.java:87) по адресу coldfusion.filter.ExceptionFilter.invoke (ExceptionFilter.java:70) по адресу coldfusion.filter.ClientScopePersistenceFilter.invoke (ClientScopePersistenceFilter.java.filterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilterFilter.ilF.Filter.java:28 at 28).invoke (GlobalsFilter.java:38) в coldfusion.filter.DatasourceFilter.invoke (DatasourceFilter.java:22) в coldfusion.xml.rpc.CFCServlet.invoke (CFCServlet.java:138) в coldfusion.xml.rlet .FCdoPost (CFCServlet.java:289) в javax.servlet.http.HttpServlet.service (HttpServlet.java:760) в org.apache.axis.transport.http.AxisServletBase.service (AxisServletBase.jax:32):.http.HttpServlet.service (HttpServlet.java:853) по адресу coldfusion.bootstrap.BootstrapServlet.service (BootstrapServlet.java:89)в jrun.servlet.FilterChain.doFilter (FilterChain.java:86) в coldfusion.monitor.event.MonitoringServletFilter.doFilter (MonitoringServletFilter.java:42) в coldfusion.bootstrap.BootstrapFilter.doavaFilter (j).servlet.FilterChain.doFilter (FilterChain.java:94) в com.seefusion.Filter.doFilter (Filter.java:49) в com.seefusion.SeeFusion.doFilter (SeeFusion.java:1500) в jrun.servlet.FilterChain.doFilter(FilterChain.java:94) в jrun.servlet.42) в jrun.servlet.jrunx.scheduler.ThreadPool $ DownstreamMetrics.invokeRunnable (ThreadPool.java:320) в jrunx.scheduler.ThreadPool $ ThreadThrottle.invokeRunnable (ThreadPool.java:428) в jrunx.scheduler.ThreadPool $ UpstreamMetrics.invokeRunnable (ThreadPool.java:266) в jrunx.scheduler.WorkerThread.run (WorkerThread *java:66 1038) ntc1040 * Не могли бы вы дать мне какие-либо предложения по решению или решению этой проблемы?

1 Ответ

0 голосов
/ 21 марта 2011

Мое предложение - найдите тег метаданных RemoteClass ... он должен указать вам правильное направление.

Удачи, Джереми

...