Google の App Engine を使用するためのテスト アプリケーションを作成しています。デフォルトの UserService を使用してログイン機能を提供したいと考えています。ログインするには、クライアントからサーバーへのリクエスト:
public class ShoppingList implements EntryPoint {
...
private ShoppingListServiceAsync service = (ShoppingListServiceAsync) GWT.create(ShoppingListService.class);
public void onModuleLoad() {
login();
}
private void login() {
AsyncCallback callback = new AsyncCallback() {
@Override
public void onFailure(Throwable caught) {
Window.alert("Login failed.");
}
@Override
public void onSuccess(Object result) {
Window.open((String) result, "_self", "");
}
};
// Get login URL; after login, return to current page.
service.getLoginURL(GWT.getHostPageBaseURL(), callback);
}
}
サーバーは、クライアントに返されるログイン URL を生成します。
public class ShoppingListServiceImpl extends RemoteServiceServlet implements ShoppingListService {
...
@Override
public String getLoginURL(String returnURL) {
UserService userService = UserServiceFactory.getUserService();
Boolean loggedIn = userService.isUserLoggedIn();
String url = userService.createLoginURL("http://google.com");
User user = userService.getCurrentUser();
return returnURL;
}
}
コードがコンパイルされて実行されます。さて、私の問題は、userService オブジェクトがどういうわけか正しくロードされていないことです。その上で任意のメソッド (isUserLoggedIn() など) を呼び出すと、null ポインター例外がスローされます。私は何が欠けていますか?