关于RPC的GWT问题 [英] GWT question on RPC

查看:102
本文介绍了关于RPC的GWT问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图理解GWT使用的RPC功能,并且遵循这个指南。如果我遵循指南并在单独的类文件中调用服务器,那么它的工作方式非常好。但是,当我尝试在entryPoints创建的地方进行调用时,它将无法工作。



我想知道为什么它是这样以及如何解决它?

  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;

/ **
*入口点类定义< code> onModuleLoad()< / code> ;.
* /
public class Async_test implements EntryPoint {

private Button specialButton = new Button(Special);

私有DataServiceAsync服务;
public void onModuleLoad(){
//在content元素上设置小部件
RootPanel内容= 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(服务器调用失败);
}
public void onSuccess(Object obj){
System.out.println(Success);
if(obj!= null){
System。 out.println(obj.toString());
} else {
System.out.println(服务器调用什么都没有返回);
}
}
});

}
});




$ b $ p
$ b

以下是错误追踪

  16:43:22.768 [错误] [async_test]未捕获的异常转义

com.google.gwt.event.shared.UmbrellaException :捕获到一个或多个异常,请参阅UmbrellaException中的完整集合#getCauses
com.google.gwt.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:214)
com.google.gwt。 event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:103)
位于com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:101)
位于com.google.gwt。 user.client.ui.Widget.fireEvent(Widget.java:103)
com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:116)
at com。 google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:151)
,位于com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1308)
at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1264)
at sun.reflect.NativeMethodAccess orImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
。在java.lang.reflect.Method.invoke(Method.java:616)
,位于com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
com.google。 gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
,位于com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
com.google。 gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:326)
处com.google com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:207)
。 gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:126)
位于com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
位于com.google。 gwt.dev.shell.ModuleSpace.invokeN ativeObject(ModuleSpace.java:269)
位于com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
位于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)
,位于com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
,位于com.google。 gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
,位于com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:281)
,位于com.google。 gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531)
,位于com.google.gwt.dev。 shell.BrowserChannelServer.run(BrowserChannelServer.java:352)$ b $在java.lang.Thread.run(Thread.java:636)
引起:com.google.gwt.user.client.rpc。 ServiceDefTarget $ NoServiceEntryPointSpecifiedException:在com.google.gwt.user.client.rpc.impl.RemoteServiceProxy.doPrepareRequestBuilderImpl(RemoteServiceProxy.java:326)没有指定服务实现URL

在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)
在com.google.gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:54)
在com.google。 gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:1)
com.google.gwt.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:204)
at com。 google.gwt.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:103)
at c om.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:101)
,位于com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:103)
com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:116)
com.google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:151 )
在com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1308)
在com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1264 )
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:43)
位于java.lang.reflect.Method.invoke(Method.java:616)
位于com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103 )
,位于com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
,位于com.google.gwt.dev.shell.OophmSe ssionHandler.invoke(OophmSessionHandler.java:157)
处com.google.gwt.dev.shell com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:326)
。 BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:207)
位于com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:126)
位于com.google.gwt.dev.shell。 ModuleSpace.invokeNative(ModuleSpace.java:561)
位于com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
位于com.google.gwt.dev.shell。 JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
位于com.google.gwt.core.client.impl.Impl.apply(Impl.java)
位于com.google.gwt.core.client。 impl.Impl.entry0(Impl.java:214)
在sun.reflect.GeneratedMethodAccessor22.invoke(来源不明)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(方法。 java:616)
在com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
在com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch。 java:71)
在com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
在com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer。 java:281)
,位于com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531)
位于com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer。 java:352)
at java.lang.Thread.run(Thread.java:636)


解决方案

您的代码没有设置服务端点,如嵌套异常所示。这些是教程中的内容:

$ p $ service =(DataServiceAsync)GWT.create(DataService.class);
ServiceDefTarget endpoint =(ServiceDefTarget)服务;
endpoint.setServiceEntryPoint(GWT.getModuleBaseURL()+data);

研究这些行和示例的其余部分,以了解GWT RPC调用如何映射以调用所需的然后在代码中添加必要的等价物(它应该几乎相同)。

然而,新的GWT现在使用更方便的注释( @RemoteServiceRelativePath(stockPrices))来设置服务端点。请参阅:

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


I'm trying to understand the RPC functionality which GWT uses, and have followed this guide. It works perfectly OK if I follow the guide and has the call to the server in a separate class file. However when I try to have the call where the entryPoints creates it will not work.

I wonder why it is like that and how to fix it?

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");
                        }
                    }
                });

            }
        });
    }
}

Here's the error trace

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)

解决方案

Your code did not set the service endpoint, as indicated by the nested exception. These are the lines in the tutorial that do that:

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

Study those lines and the rest of the example to see how the GWT RPC call maps to invoking the needed servlet and then add the necessary equivalent to your code (it should be pretty much the same).

However, the newer GWT uses a more convenient annotation now (@RemoteServiceRelativePath("stockPrices")) to set the service endpoint. See:

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

这篇关于关于RPC的GWT问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆