GWT - 异步方法调用失败

时间:2014-02-06 20:55:02

标签: java gwt smartgwt

当我执行异步方法调用时调用onFailure(...)方法的原因是什么?控制台输出总是“ERROR !!!!”。

MyEntryPoint.java:

package com.example.smartgwtproject.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
//...

public class MyEntryPoint implements EntryPoint {
    public void onModuleLoad() {
        GreetingServiceAsync service = (GreetingServiceAsync) GWT.create(GreetingService.class);
        //...

        service.getFileList(new AsyncCallback<List<String>>(){

            @Override
            public void onFailure(Throwable caught) {
                System.out.println("ERROR!!!!");
            }

            @Override
            public void onSuccess(List<String> result) {
                System.out.println("OK!");
            }
        });
        //...
    }
}

.gwt.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN"
  "http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distro-source/core/src/gwt-module.dtd">
<module rename-to='dlaconfigcenter'>

  <inherits name='com.google.gwt.user.User'/>
  <inherits name="com.smartgwt.SmartGwt"/>

  <entry-point class='com.example.smartgwtproject.client.MyEntryPoint'/>

  <source path='client' />
  <source path='shared' >
    <include name="GreetingServiceImpl.java"/>
  </source>

</module>

GreetingService的:

package com.example.smartgwtproject.client;

//...

@RemoteServiceRelativePath("greet")
public interface GreetingService extends RemoteService {
    List<String> getFileList();
}

GreetingServiceAsync:

//...

public interface GreetingServiceAsync {

    void getFileList(AsyncCallback<List<String>> callback);
}

1 个答案:

答案 0 :(得分:2)

<include name="GreetingServiceImpl.java"/>不应该在gwt.xml中。 Impl类是服务器端代码,不应作为GWT源包含在内。如果您使用任何非模拟类,如Apache Commons等第三方库,则会出现编译错误。

您可能需要对web.xml进行一些更改以指向GreetingsServiceImpl类,这可能是您尝试在gwt.xml中实现的。我建议您仔细阅读本教程,仔细检查您的配置。 http://www.vogella.com/tutorials/GWT/article.html#server

假设您的配置正常。 GreetingServiceImpl类中的getFileList()方法可能会引发异常。这通常是触发onFailure方法的原因。因为你的GreetingServiceImpl我不能确定这是不是正在发生的事情。

更新

404错误意味着GWT无法找到您的Impl类。有两种可能性。

  1. 您的Web服务器未运行。
  2. 您的web.xml配置不正确。
  3. 如果您在托管模式下运行,则#1不应该是这种情况。如果您不确定,请在此处提供有关托管模式的更多信息:http://www.gwtproject.org/doc/latest/DevGuideCompilingAndDebugging.html

    对于#2,请参考我上面链接的教程。如果您的Servlet(Impl类)未正确映射,您将继续获得404.基本上,您需要com.example.smartgwtproject.sever包中的Impl类,并在Web中具有相应的记录。 XML。它应该看起来像:

    <servlet> 
        <servlet-name>GreetingService</servlet-name>
        <servlet-class>com.example.smartgwtproject.sever.GreetingServiceImpl</servlet-class>
    </servlet> 
    
    <servlet-mapping> 
        <servlet-name>GreetingService</servlet-name> 
        <url-pattern>/GreetingService</url-pattern> 
    </servlet-mapping>
    

    但是我不能为你的设置做好准备。再次,请参阅教程了解所有细节。 Tutorial Link