异步远程服务没有定义相应的方法

时间:2013-05-15 13:19:49

标签: java gwt intellij-idea gxt

我的GWT应用程序是在IDEA中编写的。为了进行gwt RPC调用,我创建了两个接口。 第一个:

RemoteServiceRelativePath("ServerManagement")
public interface ServerManagement extends RemoteService {

String userLogin(String customerId, String login, String password) throws Exception;

ArrayList<PropertyItem> getProperties(String customerId) throws Exception;

void receive(String customerId) throws Exception;

和第二个异步的:

public interface ServerManagementAsync {

    void userLogin(String customerId, String login, String password, AsyncCallback<String> asyncCallback);
    void getProperties(String customerId, AsyncCallback<ArrayList<PropertyItem>> asyncCallback);
    void receive(String customerId, AsyncCallback<String> asyncCallback);       
} 

但是在两个接口中,带有“receive”方法的行没有红色,而ide返回消息:

Methods of asynchronous remote service 'ServerManagementAsync' are not consistent with 'ServerManagement' less... (Ctrl+F1) 
This inspection reports any inconsistency between a methods of synchronous and asynchronous interfaces of remote service

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

Async接口必须是:

public interface ServerManagementAsync {

    void userLogin(String customerId, String login, String password, AsyncCallback<String> asyncCallback);
    void getProperties(String customerId, AsyncCallback<ArrayList<PropertyItem>> asyncCallback);
    void receive(String customerId, AsyncCallback<Void> asyncCallback);       
} 

注意AsyncCallback&lt; Void&gt;在接收方法中,必须使用同步接口中方法返回的类型对AsyncCallback进行参数化。

抱歉我的英语不好。 欢呼声。

答案 1 :(得分:0)

我同意上面的答案。我还想提一下,当IntelliJ IDEA 12试图在构建时的target / generated-sources文件夹中自动生成异步接口时,我看到完全相同的错误,“异步远程服务的方法不一致”。我相信这是IDEA中的一个错误。手动将函数添加到generated-sources目录中生成的Async接口,为我修复了错误,实际上导致IDEA在将来的编译中正确生成文件,即使我删除了generated-sources文件夹并重新编译。

在Nikitin的情况下,它似乎是他手动编码的Async接口“receive”方法的AsyncCallback参数被输入的结果

AsyncCallback<String>  // does not work - String is not the synchronous method's return type

什么时候应该

AsyncCallback<Void>   // works, type matches with the synchronous method's return type

recieve方法的AsyncCallback类型需要为Void,因为它与ServerManagement.java中定义的同步接口中的receive方法的void返回类型匹配。

以下是截图:

these types must match