Как решить ClassCastException для java.util.ArrayList через WSDL CFC ColdFusion 9?

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

Я использую 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];
}

С возвращением в качестве примитивного типа, это работает

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

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

Вернуть объект сложного типа данных, но свойства пустые

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

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

Если тип возвращаемого значения - Array по умолчанию, дочерние элементы в массиве не имеют значения в свойстве

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

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

Трассировки стека:

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

Ответ получен:

soapenv: Server.userException coldfusion.xml.rpc.CFCInvocationException: [java.lang.ClassCastException: java.util.ArrayList] coldfusion.xml.rpc.CFCInvocationException: [java.lang.ClassCastException: java.util.fray.xml.rpc.CFComponentSkeleton.__createCFCInvocationException(CFComponentSkeleton.java:733) по адресу coldfusion.xml.rpc.CFComponentSkeleton.__ приведение (CFComponentSkeleton.java:409) по адресу fp_sandbox.sers:\ \ fp_sandbox\services\employeeService.cfc) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)) в java.lang.reflect.Method.invoke(Method.java:597) в 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) в org.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.CFCServ doAxisPost(CFCServlet.java:270) в coldfusion.filter.AxisFilter.invoke(AxisFilter.java:43) в coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:356) в coldfusion.filter.RequestMonitorFilter (RequestFonter.javaFilter:48) в coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) в coldfusion.filter.PathFilter.invoke(PathFilter.java:87) в coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70) в coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) в coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) в coldfusion.filter.DatasourceFilter.invoke(DatasavaFilter.inf).rpc.CFCServlet.invoke(CFCServlet.java:138) в coldfusion.xml.rpc.CFCServlet.doPost(CFCServlet.java:289) в javax.servlet.http.HttpServlet.service(HttpServlet.javag: 60).axis.transport.http.AxisServletBase.service(AxisServletBase.java:327) в javax.servlet.http.HttpServlet.service(HttpServlet.java:853) в coldfusion.bootstrap.BootstrapServlet jrun.servlet.FilterChain.doFilter(FilterChain.java:86) в coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) в coldfusion.bootstrap.BootstrapFilter.doFava46.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.FilterChain.service(FilterChain.java:101) в jrun.servlet.ServletInvoker.invoke(ServletInvoker (ServletInvoker.invoke):106) в jrun.servlet..servlet.jrpp. jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266) в jrunx.scheduler.WorkerThread.run(WorkerThread.java:66) ntcps1

Не могли бы вы дать мне какое-либо предложение, чтобы решить или обойти эту проблему?

1 ответ

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

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

Другие вопросы по тегам