热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Resteasy-Spring:在具有多个运行实例的测试期间加载了错误的应用实例

如何解决《Resteasy-Spring:在具有多个运行实例的测试期间加载了错误的应用实例》经验,求大佬解答?

问题简短摘要:

我编写了一个简单的REST HTTP接口,使用Spring Boot构建,在调用时返回一个简单的文本响应GET /app,基于其实现ClientInterface,其中有2个.REST功能是使用JAX-RS实现的,由resteasy通过RestEasy-SpringBoot库.

我还编写了3个测试,其中第3个失败,因为响应来自第二个实现,ClientInterface而不是第一个实现,因为(我假设)Resteasy混合了应用程序实例,因此错误的Spring Application上下文是使用错误的bean加载.

注意:您可以在此处找到示例应用程序,其中还包括文档

请查看源代码以获得清晰的图片.它也会占用太多空间来粘贴代码.

更多细节:

有两个实现ClientInterface提供REST资源给出的响应.使用client-impl-two配置文件切换它们.如果配置文件不存在,则使用第一个实现,如果存在,则使用第二个实现.

一个第三个测试期望第一个实现的响应,第二个测试期望秒实现的响应,因为它正在使用client-two-impl配置文件.

当我使用IntelliJ的JUnit集成运行测试时,第三个失败: 在此输入图像描述 在此输入图像描述

您会注意到测试被命名为强制执行某个执行顺序,这是相关的,因为第三个测试仅在第二个测试执行后才会失败.并且它失败了,因为它得到了第二个ClientInterface实现的响应,即使第三个测试不使用client-impl-two配置文件.

到目前为止我做了/发现了什么:

有时,运行./mvnw clean test也有相同的错误结果,但我无法提供可重现的示例

Spring/Spring Boot正确加载了Spring Application上下文

Spring Boot正确地注入端口号,测试中的其余客户端总是调用它们应该的REST实例

只有当Resteasy接管请求时,它才会以某种方式加载应用程序的错误实例,因此使用了错误的Spring Application上下文,这就是为什么它会给出不正确的响应

我通过在SpringResourceFactory.createResource()中保留一个断点来解决这个问题,它只是beanFactory对资源bean进行querynig ,并调用beanFactory.getBean(ClientInterface.class)以查看哪个实现出现了,并且对于第三个测试它是不正确的

在测试期间,有多个应用程序运行实例,每个实例都在自己的端口上,我认为这个问题与问题有关

还有另一个分支,jersey-instead-of-resteasy其中Jersey被用作JAX-RS实现,并且无论是使用IntelliJ还是使用Maven运行测试都是成功的

有一个DebugFilter与我检查Spring应用程序上下文的样子是由RestEasy的servlet的接管请求之前,它始终是正确的(正确执行的ClientInterface加载),无论测试如何执行

只有在运行第三次测试时,当请求到达Resteasy时,才会加载不正确的应用实例,如上述其中一项所述

基于以上几点,我强烈怀疑Resteasy可能是个问题.

任何帮助是极大的赞赏.


推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
author-avatar
低调浪漫0613
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有