使用SyncProxy测试服务:“接收RPC响应时IOException”

时间:2017-05-29 14:14:22

标签: java serialization gwt gwt-syncproxy

我目前正在尝试使用SyncProxy库来测试我的应用程序的服务,以便使用JMeter进行负载测试。该应用程序工作正常,我在localhost上运行它。

当我尝试在JUnit测试中使用SyncProxy时出现问题,它们会失败。

以下是JUnit测试中使用的一段代码:

 ThemeServiceAsync themeServiceAsync = (ThemeServiceAsync) SyncProxy
          .newProxyInstance(ThemeServiceAsync.class, MODULE_BASE_URL, GET_THEMES_SERVICE_NAME);

 themeServiceAsync.getListTheme(codeEfs, codeSI, noStr, statut, new AsyncCallback<List<Theme>> (){

    @Override
    public void onFailure(Throwable arg0) {
        // TODO Auto-generated method stub
        System.out.println(arg0);
    }


    @Override
    public void onSuccess(List<Theme> result) {
        // TODO Auto-generated method stub
        System.out.println(result);

    }

 });

我收到以下错误:IOException while receiving RPC response

我使用调试模式来查找问题的来源。在服务器端,一切都很顺利,直到结果发送回客户端。结果在数据库中找到,但我有一个神秘的500错误。

挖掘之后,我发现抛出了这个异常(在AbstractRemoteServiceServlet中):

com.google.gwt.user.client.rpc.SerializationException: Type 'net.gicm.ector.shared.beans.Theme' was not assignable to 'com.google.gwt.user.client.rpc.IsSerializable' and did not have a custom field serializer.
For security purposes, this type will not be serialized.: instance = net.gicm.ector.shared.beans.Theme@1b7cb71

我发现很多线程都在讨论你的类需要实现“isSerializable”的事实,但我不明白的是,我实际上是在localhost上运行我的应用程序,一切都运行良好,包括不同的服务。

但是当谈到运行我的JUnit时,我有这些错误。

1 个答案:

答案 0 :(得分:0)

看起来你搞砸了路径或类路径资源。 GWT-RPC使用一些生成的文件,称为策略来实现某种安全机制(即禁止某些类型等)。 在您的情况下,看起来在测试期间这些文件在类路径上放错位置。

当发生这种情况时,我通常会通过RemoteServiceServlet#getSerializationPolicy进行调试(与GWT 2.8.1相关的参考而不是2.6,但我认为这部分没有太大变化)。 您最终会在RemoteServiceServlet#loadSerializationPolicy中尝试加载某些文件,并且您将能够看到它尝试执行哪些路径以及为什么这些文件丢失。