我想使用GWT-RPC在我的服务器上用Java执行简单的单元测试。
我在Eclipse中创建了一个GWT项目(GWT 2.7)(使用默认的GreetingService)。它可以工作,我可以在Tomcat服务器中将其作为servlet启动。
接下来,我创建了一个Eclipse项目,使用syncProxy调用GreetingService。
try {
SyncProxy.setBaseURL("http://127.0.0.1:8080/mywebapp/mywebapp/");
GreetingService svc = SyncProxy.createSync(GreetingService.class);
String greeting = svc.greetServer("Hello");
System.out.println("Result: " +greeting);
}
catch ( Exception e )
{
throw new RuntimeException ( e );
}
当我执行此代码时,我得到以下异常:
juin 08, 2015 8:57:14 AM com.gdevelop.gwt.syncrpc.RpcPolicyFinder searchPolicyFileInClassPath
Infos: No RemoteService in the classpath
juin 08, 2015 8:57:14 AM com.gdevelop.gwt.syncrpc.SyncProxy populatePolicyMap
Infos: Populating Policy Map
juin 08, 2015 8:57:14 AM com.gdevelop.gwt.syncrpc.RpcPolicyFinder fetcherSerializationPolicyNameJS
Infos: Remote Services found with JS Fetcher
juin 08, 2015 8:57:14 AM com.gdevelop.gwt.syncrpc.SyncProxy defaultUnsetSettings
Infos: Updating Default Settings for Unset Values
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/MethodNotSupportedException
at com.gdevelop.gwt.syncrpc.SyncProxy.createProxy(SyncProxy.java:120)
at com.gdevelop.gwt.syncrpc.SyncProxy.createSync(SyncProxy.java:138)
at myJmeterPlugin.TestGWT.main(TestGWT.java:11)
Caused by: java.lang.ClassNotFoundException: org.apache.http.MethodNotSupportedException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 3 more
在类路径中,我有来自GWT项目的.jars文件,syncProxy和gwt-servlet.jar。
您是否知道如何解决此问题? 的问候,
塞巴斯蒂安。
答案 0 :(得分:0)
看起来你也需要Apache HTTP Components依赖jar。如果你看一下gwt-syncproxy依赖项(https://github.com/jribble/gwt-syncproxy/blob/master/pom.xml,滚动到底部),你会看到:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.1.3</version>
</dependency>
如果你还没有使用Maven,可以在这里找到jar:http://mvnrepository.com/artifact/org.apache.httpcomponents
干杯..
答案 1 :(得分:0)
只是为了验证,你正在创建一个Java eclipse项目(不是Android)?假设同样多,那么请确保在类路径中包含gwt-user-2.7.0和gwt-dev-2.7.0 jar。关于Lev的回答,MethodNotSupportedException
类实际上是在gwt-dev-2.7.0 jar中,所以你不一定需要引入一个单独的资源。但是,要使GSP正常工作,您需要在测试项目中使用User和Dev jar(不仅仅是指向正在测试的GWT项目的链接)。如果要将测试项目与主项目链接,请检查是否在主项目的构建路径的“订购和导出”选项卡中检查了这些jar。或者,在您的测试项目中直接提供这两个罐子。如果您仍有问题,请验证并准确报告在Build Path(在Eclipse中)中设置了哪些jar,因为指定的构建路径和类路径有时会正确匹配(因此下面有关于移动到gradle的注释)。 / p>
作为一个注意事项,我正在开发一个基于gradle的新分支(https://github.com/jcricket/gwt-syncproxy/tree/gradlify),并且可以使用依赖关系管理,因此下一个GSP版本应该会删除这样的问题。