1

我希望这个问题不会浪费你的时间。

我使用 Adob​​e Coldfusion 9 创建 CFC 来与数据库交互。一般情况下,CFC 可以自己生成 WSDL。例如:

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

WSDL 生成良好。但是当我尝试使用 Adob​​e Flash Builder 4 的 Data 服务生成服务类来连接 ColdFusion 的 WSDL 时发现了问题。

如果您尝试调用返回原始数据类型为 int 或 String 的远程函数,它可以正常工作。

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

使用 return 作为原始类型,它可以工作。

但是复杂的数据类型,例如返回自定义类,字段中没有数据。

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");
}

如果返回类型为默认数组,则数组中的子项在属性中没有值。

如果返回类型是 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.ArrayList] 在coldfusion。 xml.rpc.CFComponentSkeleton.__createCFCInvocationException(CFComponentSkeleton.java:733) 在coldfusion.xml.rpc.CFComponentSkeleton.__cast(CFComponentSkeleton.java:409) 在fp_sandbox.services.EmployeeService.search(D:\home\cashr.com\wwwroot \fp_sandbox\services\employeeService.cfc) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ) 在 org.apache.axis.providers 的 java.lang.reflect.Method.invoke(Method.java:597)。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.CFCServlet.doAxisPost(CFCServlet.java: 270) 在coldfusion.filter.AxisFilter.invoke(AxisFilter.java:43) 在coldfusion。filter.ApplicationFilter.invoke(ApplicationFilter.java:356) 在coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java: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.xml.rpc.CFCServlet.invoke(CFCServlet.java:138)处coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)处coldfusion.xml.rpc.CFCServlet.doPost(CFCServlet.java:289 ) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:760) 在 org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327) 在 javax.servlet.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.doFilter(BootstrapFilter.java:46) 在jrun.servlet.FilterChain.doFilter(FilterChain.java:94) 在com.seefusion .Filter.doFilter(Filter.java:49) at com.seefusion.SeeFusion.doFilter(SeeFusion.java:1500) at jrun.servlet.FilterChain.doFilter(FilterChain.java:94) at jrun.servlet.FilterChain.service( FilterChain.java:101) 在 jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106) 在 jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42) 在 jrun.servlet.JRunRequestDispatcher。调用(JRunRequestDispatcher.java:286) 在 jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543) 在 jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) 在 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) ntcps1invokeRunnable(ThreadPool.java:428) 在 jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266) 在 jrunx.scheduler.WorkerThread.run(WorkerThread.java:66) ntcps1invokeRunnable(ThreadPool.java:428) 在 jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266) 在 jrunx.scheduler.WorkerThread.run(WorkerThread.java:66) ntcps1

你能给我任何建议来解决或解决这个问题吗?

4

1 回答 1

1

我的建议——查看 RemoteClass 元数据标签……它应该为您指明正确的方向。

祝你好运,杰里米

于 2011-03-21T12:41:00.243 回答