2011-02-05 9 views
2

GWTが使用するRPC機能を理解しようとしており、これに続きましたguide。私はガイドに従って、別のクラスファイルのサーバーへの呼び出しを持っている場合、それは完全に正常に動作します。しかし、私がentryPointsが作成する呼び出しをしようとすると、動作しません。RPCに関するGWT質問

私はそれがなぜそうであり、それを修正するのかと思いますか?

package com.async.me.client; 

import com.async.me.client.widgets.HelloWidget; 
import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.core.client.GWT; 
import com.google.gwt.event.dom.client.ClickEvent; 
import com.google.gwt.event.dom.client.ClickHandler; 
import com.google.gwt.user.client.rpc.AsyncCallback; 
import com.google.gwt.user.client.ui.Button; 
import com.google.gwt.user.client.ui.RootPanel; 

/** 
* Entry point classes define <code>onModuleLoad()</code>. 
*/ 
public class Async_test implements EntryPoint { 

    private Button specialButton = new Button("Special"); 

    private DataServiceAsync service; 
    public void onModuleLoad() { 
     // set widget on "content" element 
     RootPanel content = RootPanel.get("content"); 


     content.add(specialButton); 
     service = (DataServiceAsync) GWT.create(DataService.class); 
     specialButton.addClickHandler(new ClickHandler() { 

      @Override 
      public void onClick(ClickEvent event) { 
       System.out.println("Sometihng"); 

       service.getData(new AsyncCallback() { 

        public void onFailure(Throwable e) { 
         System.out.println("Server call failed"); 
        } 
        public void onSuccess(Object obj) { 
         System.out.println("Success"); 
         if (obj != null) { 
          System.out.println(obj.toString()); 
         } else { 
          System.out.println("Server call returned nothing"); 
         } 
        } 
       }); 

      } 
     }); 
    } 
} 

入れ子の例外によって示されるようにここでエラートレース

16:43:22.768 [ERROR] [async_test] Uncaught exception escaped 

com.google.gwt.event.shared.UmbrellaException: One or more exceptions caught, see full set in UmbrellaException#getCauses 
    at com.google.gwt.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:214) 
    at com.google.gwt.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:103) 
    at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:101) 
    at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:103) 
    at com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:116) 
    at com.google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:151) 
    at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1308) 
    at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1264) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:326) 
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:207) 
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:126) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269) 
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) 
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java) 
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:214) 
    at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:281) 
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531) 
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352) 
    at java.lang.Thread.run(Thread.java:636) 
Caused by: com.google.gwt.user.client.rpc.ServiceDefTarget$NoServiceEntryPointSpecifiedException: Service implementation URL not specified 
    at com.google.gwt.user.client.rpc.impl.RemoteServiceProxy.doPrepareRequestBuilderImpl(RemoteServiceProxy.java:326) 
    at com.google.gwt.user.client.rpc.impl.RemoteServiceProxy.doInvoke(RemoteServiceProxy.java:265) 
    at com.async.me.client.DataService_Proxy.getData(DataService_Proxy.java:35) 
    at com.async.me.client.Async_test$1.onClick(Async_test.java:44) 
    at com.google.gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:54) 
    at com.google.gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:1) 
    at com.google.gwt.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:204) 
    at com.google.gwt.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:103) 
    at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:101) 
    at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:103) 
    at com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:116) 
    at com.google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:151) 
    at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1308) 
    at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1264) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:326) 
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:207) 
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:126) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269) 
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) 
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java) 
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:214) 
    at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:281) 
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531) 
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352) 
    at java.lang.Thread.run(Thread.java:636) 

答えて

9

はあなたのコードでは、サービスエンドポイントを設定しなかったです。 (

service = (DataServiceAsync) GWT.create(DataService.class); 
ServiceDefTarget endpoint = (ServiceDefTarget) service; 
endpoint.setServiceEntryPoint(GWT.getModuleBaseURL() + "data"); 

研究それらのラインと例の残りの部分は必要なサーブレットを起動する方法をGWT RPC呼び出しマップを参照して、あなたのコードに必要な同等を追加する:これらは、それを行うチュートリアルの線であり、それはかなり同じでなければならない)。

しかし、新しいGWTではサービスのエンドポイントを設定するのに、より便利なアノテーション(@RemoteServiceRelativePath("stockPrices"))が使用されています。参照:

http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html

+0

シンプルな修正、それを修正しました。ありがとう! :) – starcorn

+0

@starcorn - 喜んで助けてください –