2012-03-09 50 views
0

我不能调用使用Adobe BlazeDS的只有“long”类型参数的方法吗?如何调用使用BlazeDS的只有“long”类型参数的方法?

这是它。

[Flex的]

var ro:RemoteObject = new RemoteObject(); 
ro.destination = "objectService"; 
ro["getById"].send(3107); 

【JAVA]

public class ObjectServiceImpl implements ObjectService { 
    public ObjectDomain getById(long id) { 
     ・・・ 
    } 
} 

所以,这个错误是发生。

flex.messaging.MessageException: Cannot invoke method 'getById'. 3,107 
arguments were sent but 1 were expected. 
at flex.messaging.util.MethodMatcher.methodNotFound(MethodMatcher.java:387) 
at flex.messaging.util.MethodMatcher.getMethod(MethodMatcher.java:172) 
at 
flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:417) 
at 
flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183) 
at 
flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1400) 
at 
flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:1005) 
at 
flex.messaging.endpoints.AbstractEndpoint$$FastClassByCGLIB$$1a3ef066.invoke(<generated>) 
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) 
at 
org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688) 
at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
at 
org.springframework.flex.core.MessageInterceptionAdvice.invoke(MessageInterceptionAdvice.java:66) 
at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at 
org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:124) 
at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at 
org.springframework.aop.framework.Cglib2AopProxy$FixedChainStaticTargetInterceptor.intercept(Cglib2AopProxy.java:572) 
at 
flex.messaging.endpoints.AMFEndpoint$$EnhancerByCGLIB$$49c0058b.serviceMessage(<generated>) 
at 
flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:103) 
at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158) 
at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:44) 
at 
flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67) 
at 
flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:166) 
at 
flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:291) 
at 
flex.messaging.endpoints.AMFEndpoint$$EnhancerByCGLIB$$49c0058b.service(<generated>) 
at 
org.springframework.flex.servlet.MessageBrokerHandlerAdapter.handle(MessageBrokerHandlerAdapter.java:101) 
at 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
at 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
at 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
at 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) 
at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at 
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) 
at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) 
at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) 
at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) 
at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) 
at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) 
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) 
at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) 
at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) 
at 
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) 
at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) 
at java.lang.Thread.run(Thread.java:595) 

[环境] ·BlazeDS的4.0 ·春天BlazeDS集成1.0.3 ·春3.0.5 ·Tomcat的5.0 ·Java 5.0中 ·Flex的4.6

请告诉我任何解决方案。 。

+0

什么是参数值?当然你正在发送一个序列号? – weltraumpirat 2012-03-09 06:16:21

+0

请同时发布ws.call的FLex/AS3示例代码 – 2012-03-09 07:48:37

+0

谢谢您的回复。我编辑! – Take 2012-03-09 09:36:54

回答

0

尝试以下操作:

 //The way you defined the RemoteObject 
     var ro:RemoteObject = new RemoteObject(); 
     ro.destination = "objectService"; 

     //The id variable 
     var id:Number = 3107; 
     //The Operation to send over the RemoteBoject 
     var getByIdOperation:Operation = new Operation(); 
     //Name of the method on the server side 
     getByIdOperation.name = "getById"; 
     //The argument in this case the long 3107 (var id:Number= 3107) 
     getByIdOperation.arguments = [id]; 
     //The method to handle the result if needed 
     getByIdOperation.addEventListener(ResultEvent.RESULT, getByIdHandler) 
     //Send the operation through the RemoteObject(ro) 
     ro.operations = [getByIdOperation]; 
     getByIdOperation.send();  

java.lang。 Long在ActionScript-3中表示为Number。当远程电话收到结果时调用的示例方法

private function getByIdHandler(event:ResultEvent):void 
    { 
     myObject = event.result as ObjectDomain; 
    } 
+1

非常感谢!它已经解决了!但为什么? Operation实例必须显式声明并设置为RemoteObject实例? – Take 2012-03-12 03:00:40

+0

欢迎您!我很高兴我可以帮助:)不,据我所知,它也没有。你可以像_ro [method] .send(arg1,arg2)那样做; _我不完全确定它为什么不适合你,因为当我尝试它时它工作正常。你可以尝试把3107放在“”中,比如_ro [“getById”]。send(“3107”); _ – Sebastian 2012-03-12 11:59:32

+0

@记得如果它解决了你的问题, – Sebastian 2012-03-16 12:55:07

相关问题