我需要从简单的 Java 代码调用 GWT RPC 服务。是的,我读过这个
但是,我的问题是我无法访问 Web 应用程序代码(尽管我可以询问并获取其中的某些部分),所以我不能将它添加到我的 Java 项目的构建路径中。我从互联网上阅读的所有信息都不清楚究竟需要导入什么。问题是:为了使对服务的调用正常工作(例如使用 syncproxy gwt),我应该在我的项目中包含的最小值是多少?在我的代码中重新定义客户端接口就足够了,还是我也应该做一些编译工作?
编辑:我已经使用在本地主机上运行的默认 Web 应用程序在本地进行了一些测试。我创建了一个新的 java 项目,导入了我在 web 应用程序的 WAR 文件夹中找到的同步和异步服务接口以及 RPC 序列化策略。这是我的测试代码
import com.gdevelop.gwt.syncrpc.SyncProxy;
public class serviceCall {
private static final String MODULE_BASE_URL = "http://127.0.0.1:8888/gwttestapp/";
private static final String SERVICE_NAME = "greet";
public static void main(String[] args) {
GreetingService rpcService = (GreetingService) SyncProxy.newProxyInstance(GreetingService.class, MODULE_BASE_URL, SERVICE_NAME, "CB32CC2E454EE7E1088B2E29CEB44F84");
String result = rpcService.greetServer("SyncProxy");
}
}
但是服务器似乎无法识别 RPC 策略,因为我得到以下异常:
Exception in thread "main" com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: This application is out of date, please click the refresh button on your browser. ( Blocked attempt to access interface 'GreetingService', which is not implemented by 'com.apptesting.server.GreetingServiceImpl'; this is either misconfiguration or a hack attempt )
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.gdevelop.gwt.syncrpc.SyncClientSerializationStreamReader.instantiate(SyncClientSerializationStreamReader.java:746)
at com.gdevelop.gwt.syncrpc.SyncClientSerializationStreamReader.deserialize(SyncClientSerializationStreamReader.java:816)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)
at com.gdevelop.gwt.syncrpc.RemoteServiceSyncProxy.doInvoke(RemoteServiceSyncProxy.java:204)
at com.gdevelop.gwt.syncrpc.RemoteServiceInvocationHandler.invoke(RemoteServiceInvocationHandler.java:193)
at com.sun.proxy.$Proxy0.greetServer(Unknown Source)
at serviceCall.main(serviceCall.java:11)
有人可以帮忙吗?