好的,这让我非常生气。我已经在互联网上跟踪了近8个教程,最后,我的Red5服务器实例正常运行。对我好!但是当我从我的AS3应用程序调用我的Red5应用程序中的Java方法时,在Eclipse的“控制台”窗口中,我收到了这个错误:
[ERROR] [NioProcessor-1] org.red5.server.service.ServiceInvoker - Method getTheName with parameters [] not found in org.red5.core.Application@17e5fde
这是我的Application.java文件。
package org.red5.core;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IConnection;
import org.red5.server.api.IScope;
import org.red5.server.api.service.ServiceUtils;
/**
* Sample application that uses the client manager.
*
* @author The Red5 Project (red5@osflash.org)
*/
public class Application extends ApplicationAdapter {
/** {@inheritDoc} */
@Override
public boolean connect(IConnection conn, IScope scope, Object[] params) {
return true;
}
/** {@inheritDoc} */
@Override
public void disconnect(IConnection conn, IScope scope) {
super.disconnect(conn, scope);
}
public String getTheName() { return "MyName!"; }
}
这是我的AS3代码。我把它放在时间轴上。
var nc:NetConnection = new NetConnection();
nc.connect("http://localhost/Mintium/RoomHere", "SomeUsernameHere");
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nc.objectEncoding = ObjectEncoding.AMF0;
function onNetStatus(e:NetStatusEvent):void
{
switch (e.info.code)
{
case "NetConnection.Connect.Success" :
trace("connected");
nc.call("getTheName", new Responder(getName_result, getName_error));
break;
}
}
function getName_result(res:Object):void { append("Name : " + res.toString()); }
function getName_error(res:Object):void { append(res.toString()); }
已经过了一个星期,我一直试图解决这个问题,我的约会时间是下个月。如果这个问题没有解决,我的评估就会失败。请帮助我解决我的问题。非常感谢你。
答案 0 :(得分:0)
抱歉,2个月前我没有看到这个,我本可以帮助你通过评估。不过,我想我可以回答这个问题,因为调用Red5服务时遇到了类似的问题。
解决此问题的关键在于使用Spring Framework的Red5部分。在您的项目中,应该有一个名为red5-web.xml的文件驻留在Server项目的WEB-INF文件夹中。该文件包含Red5的Spring组件使用的一些Bean依赖项。在我阅读的教程中,甚至在大多数(相当稀疏和分布式的)red5编程文档中都没有提到这一点。
您需要做的是在该文件中为您的方法添加bean条目。在您的情况下,条目应如下所示:
<bean id="getTheName.service" class="org.red5.core.Application" />
请注意我对函数名称的使用,使用&#34; .service&#34;追加。我不明白为什么,但你需要&#34; .service&#34;附加以便Red5找到你的功能。您需要为要将其功能用作服务的每个类添加类似的条目。
当然,我将上面提到的所有内容都基于你将服务放入Application类的事实 - 这是我从未做过的事情。如果你读了red5-web.xml文件,你会发现该类已经有一个条目,因为它已经通过Spring注入了作为&#34;端点的类#34;用于通过Web处理请求。我不知道使用Application类作为端点和服务提供者是一个好主意(它违反&#34;关注点分离&#34;在OOP中可能会导致Spring出现问题)。
我通常做的是在org.red5.core包中添加一个单独的类(或者你可能需要的任何其他包),用于提供所需的服务,然后在red5-web.xml中添加一个注入类及其方法。因此,对于您的项目,我们假设您在org.red5.core包中有一个名为NameProvider的类:
public class NameProvider
{
public NameProvider() {}
public String getTheName() { return("MyName!"); }
}
然后将以下条目添加到red5-web.xml文件中:
<bean id="getTheName.service" class="org.red5.core.NameProvider" />
这应该可以使一切运转起来。
我希望将来或其他任何有这个问题的人能帮到你。我只是希望我能早点看到这个问题。