执行RPC时GWT SerializationException\uuuuLjava\uLang\uString\u2v

执行RPC时GWT SerializationException\uuuuLjava\uLang\uString\u2v,java,gwt,Java,Gwt,下面是我的服务、serviceImpl和异步回调接口。如果有人能帮助我理解为什么submitTeam(…)没有被调用,我将不胜感激(但是我看到在使用时正在调用isValidEmail(…)。至少为我提供调试方法,因为目前我无法使用eclipse调试器(eclipse没有在断点处停止),并且sysout/syserr语句也没有记录到控制台:-( 在添加基于@Pistol建议的Window.alert(…)后取得了一些进展,它将在SubmitTeamCallback的方法上失败(Throwable

下面是我的服务、serviceImpl和异步回调接口。如果有人能帮助我理解为什么submitTeam(…)没有被调用,我将不胜感激(但是我看到在使用时正在调用isValidEmail(…)。至少为我提供调试方法,因为目前我无法使用eclipse调试器(eclipse没有在断点处停止),并且sysout/syserr语句也没有记录到控制台:-(

在添加基于@Pistol建议的Window.alert(…)后取得了一些进展,它将在SubmitTeamCallback的方法上失败(Throwable t)


unknown.com\u google\u gwt\u user\u client\u rpc\u SerializationException\u SerializationException\u Ljava\u lang\u String\u 2V(未知源代码)

正在使用另一种方法调试客户端代码。例如,将其放在回调onFailure()中方法来查看捕获的消息。或者您可以使用或类似的方法来查看rpc调用是否正在进行

编辑:


你确定你的玩家类实现了并且有一个空的构造函数吗?请检查。

解决了这个问题。POJO应该有一个默认构造函数,而我正在使用的没有。GWT编译器也没有抱怨。不确定原因。

+1我使用了FirBug的XHR控制台,看到没有提交任何内容。我将使用Window.alert()和see我有Player类和Captain类(从Player扩展而来),它们都实现了可序列化和可序列化的接口。列表Player可以包含Player或Captain对象。听起来和我的答案完全一样:)@手枪内裤是的,我没有注意到你帖子中的空构造函数。我接受了你的帖子作为答案。tx
@RemoteServiceRelativePath("registrationService")
public interface RegistrationService extends RemoteService
{
    Boolean isValidEmail(String email);

    String submitTeam(String teamName, List<Player> players);
}

public interface RegistrationServiceAsync
{
    void isValidEmail(String email, AsyncCallback<Boolean> callback);

    void submitTeam(String teamName, List<Player> players, AsyncCallback<String> callback);
}

public class SubmitTeamCallback implements AsyncCallback<String> {
    private final Label status;

    public SubmitTeamCallback(Label s) {
        status = s;
    }

    public void onFailure(Throwable caught) {
        status.setText(caught.getMessage());
    }

    public void onSuccess(String result) {
        System.out.println("" + getClass().getName() + " : " + result);
        status.setText(result);
    }
}


public class RegistrationCallback implements AsyncCallback<Boolean>
{
    private final Label         status;
    private final PlayerWidget  playerWidget;
    private Boolean             isValidSharedFlag;

    public RegistrationCallback(Label s, PlayerWidget pw, Boolean isValid)
    {
        status = s;
        playerWidget = pw;
        setIsValidSharedFlag(isValid);
    }

    public void onFailure(Throwable caught)
    {
        status.setText(caught.getMessage());
    }

    public void onSuccess(Boolean result)
    {
        if (result.equals(Boolean.FALSE))
        {
            playerWidget.invalidEmail();
            String oldText = status.getText();

            status.setText(oldText + "Please specify a valid email address for the captain.");
            setIsValidSharedFlag(Boolean.FALSE);
        } else
        {
            playerWidget.validEmail();
            String newText = status.getText().replace("Please specify a valid email address for the captain.", "");
            status.setText(newText);
            setIsValidSharedFlag(Boolean.TRUE);
        }
    }

    public void setIsValidSharedFlag(Boolean isValidSharedFlag)
    {
        this.isValidSharedFlag = isValidSharedFlag;
    }

    public Boolean getIsValidSharedFlag()
    {
        return isValidSharedFlag;
    }
}

public class RegistrationServiceImpl extends RemoteServiceServlet implements
        RegistrationService {
    Logger logger = Logger.getLogger("");
    private final Emailer emailer = new Emailer();
    private final EmailValidator validator = new EmailValidator();

    public Boolean isValidEmail(String email) {
        return validator.validate(email);
    }

    public String submitTeam(String teamName, List<Player> players) {
        logger.log(Level.SEVERE, "This is a test log");

        System.out.println("This is a test log");
        boolean emailSent = false;
        for (Player p : players) {
            System.out.println("Emailing to captain");
            if (p instanceof Captain) {
                if (!validator.validate(p.getEmail())) {
                    return "Please specify a valid email";
                }
                System.out.println("Emailing to captain");
                emailSent = emailer.email(p);
            }
        }
        if (emailSent) {
            System.out.println("Email sent successfully");
            return teamName
                    + " has been successfully registered. Please pay the registration fee to confirm registration. Thank you.";
        } else {
            return "Unable to send email. Please email the team details [Team name, minimum of 6 players, captain's email address and phone number] to funpluscharity@gmail.com";
        }
    }
}
private void registerTeam() {
            System.out.println("Received request to dubmit team");
            StringBuilder statusText = new StringBuilder();
            try {
                Boolean isValid = true;

                RegistrationServiceAsync service = (RegistrationServiceAsync) GWT
                        .create(RegistrationService.class);
                ServiceDefTarget serviceDef = (ServiceDefTarget) service;
                System.err.println(".........." + GWT.getModuleBaseURL());
                serviceDef
                        .setServiceEntryPoint("/services/registrationService");

                if (teamName.getText() == null
                        || teamName.getText().length() == 0) {
                    isValid = false;
                    statusText.append("Please specify team name. ");
                }
                Player captain = getCaptain();
                if (!atleast6PlayersAreSpecified()) {
                    isValid = false;
                    statusText.append("Please specify atleast 6 players. ");
                }
                if (captain == null) {
                    isValid = false;
                    statusText.append("Please designate a captain. ");
                }
                System.out.println("Is request valid? " + isValid);
                if (isValid.equals(Boolean.TRUE)) {
                    System.out.println("RPC - submitTeam start ");
                    System.out.println("" + getPlayers());
                    SubmitTeamCallback callback = new SubmitTeamCallback(status);
                    service.submitTeam(teamName.getText(), getPlayers(),
                            callback);
                    System.out.println("RPC - submitTeam end");

                } else {
                    status.setText(statusText.toString());
                }

            } catch (Exception e) {
                e.printStackTrace();
                System.err.println(e.getMessage());
            }
        }