GWT 同步代理:createProxy MethodNotSupportedException
GWT syncProxy: createProxy MethodNotSupportedException
我想在 Java 中使用 GWT-RPC 为我的服务器执行简单的单元测试。
我已经在 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.run(Unknown Source)
at java.net.URLClassLoader.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
在 class 路径中,我有来自 GWT 项目、syncProxy 和 gwt-servlet.jar.
的 .jars 文件
你知道如何解决这个问题吗?
此致,
塞巴斯蒂安。
看来您还需要 Apache HTTP 组件依赖项 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
干杯..
只是为了验证一下,您正在创建一个 Java eclipse 项目(不是 Android)?假设尽可能多,然后确保您还在 class 路径中包含 gwt-user-2.7.0 和 gwt-dev-2.7.0 jar。关于 Lev 的回答,MethodNotSupportedException
class 实际上在 gwt-dev-2.7.0 jar 中,因此您不一定需要引入单独的资源。但是,要使 GSP 工作,您将需要在您的测试项目中提供用户和开发 jar(不仅仅是 link 进入被测 GWT 项目)。如果您link将您的测试项目与您的主项目结合使用,请检查这些 jar 是否已在主项目构建路径的“订购和导出”选项卡中选中。或者,让这两个 jar 直接在您的测试项目中可用。如果您仍然有问题,请验证并准确报告在构建路径(在 Eclipse 中)中设置了哪些 jar,因为指定的构建路径和 classpath 有时会正确匹配(因此下面关于移动到 [=17 的注释=]).
需要注意的是,我正在开发一个基于 gradle 的新分支 (https://github.com/jcricket/gwt-syncproxy/tree/gradlify),并将提供依赖管理,因此下一个 GSP 版本应该会消除这样的问题从发生。
我想在 Java 中使用 GWT-RPC 为我的服务器执行简单的单元测试。
我已经在 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.run(Unknown Source)
at java.net.URLClassLoader.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
在 class 路径中,我有来自 GWT 项目、syncProxy 和 gwt-servlet.jar.
的 .jars 文件你知道如何解决这个问题吗? 此致,
塞巴斯蒂安。
看来您还需要 Apache HTTP 组件依赖项 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
干杯..
只是为了验证一下,您正在创建一个 Java eclipse 项目(不是 Android)?假设尽可能多,然后确保您还在 class 路径中包含 gwt-user-2.7.0 和 gwt-dev-2.7.0 jar。关于 Lev 的回答,MethodNotSupportedException
class 实际上在 gwt-dev-2.7.0 jar 中,因此您不一定需要引入单独的资源。但是,要使 GSP 工作,您将需要在您的测试项目中提供用户和开发 jar(不仅仅是 link 进入被测 GWT 项目)。如果您link将您的测试项目与您的主项目结合使用,请检查这些 jar 是否已在主项目构建路径的“订购和导出”选项卡中选中。或者,让这两个 jar 直接在您的测试项目中可用。如果您仍然有问题,请验证并准确报告在构建路径(在 Eclipse 中)中设置了哪些 jar,因为指定的构建路径和 classpath 有时会正确匹配(因此下面关于移动到 [=17 的注释=]).
需要注意的是,我正在开发一个基于 gradle 的新分支 (https://github.com/jcricket/gwt-syncproxy/tree/gradlify),并将提供依赖管理,因此下一个 GSP 版本应该会消除这样的问题从发生。