【问题标题】:GWT syncProxy: createProxy MethodNotSupportedExceptionGWT 同步代理:createProxy MethodNotSupportedException
【发布时间】:2015-06-08 08:04:18
【问题描述】:

我想使用 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 项目、syncProxy 和 gwt-servlet.jar 的 .jars 文件。

您知道如何解决此问题吗? 问候,

塞巴斯蒂安。

【问题讨论】:

    标签: java eclipse gwt gwt-syncproxy


    【解决方案1】:

    只是为了验证,您正在创建一个 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。或者,使这两个 jar 直接在您的测试项目中可用。如果您仍然有问题,请验证并准确报告在构建路径(在 Eclipse 中)中设置了哪些 jar,因为指定的构建路径和类路径有时会正确匹配(因此以下关于迁移到 gradle 的说明)。

    需要注意的是,我正在开发一个基于 gradle 的新分支 (https://github.com/jcricket/gwt-syncproxy/tree/gradlify),它将提供依赖管理,因此下一个 GSP 版本应该会消除此类问题的发生。

    【讨论】:

    • 添加 gwt-dev.jar & gwt-user.jar 解决了这个问题,我能够成功执行我的测试。我的目标是重用这段代码在 Jmeter 中实现我的测试。我想我已经掌握了启动它的所有信息 :-) 感谢您的帮助!
    【解决方案2】:

    看起来您还需要 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

    干杯..

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 2015-04-15
    • 2018-09-28
    • 2011-10-26
    相关资源
    最近更新 更多