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