当前位置: 首页 > 知识库问答 >
问题:

无法施放组织。玻璃鱼。运动衫注入。hk2。HK2将ManagerFactory导入组织。玻璃鱼。运动衫内部的注射注射管理工厂

陈知
2023-03-14

我在使用javax HTTP客户端时遇到以下异常。知道为什么会这样吗?

java.lang.ClassCastException: Cannot cast org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory to org.glassfish.jersey.internal.inject.InjectionManagerFactory
    at java.lang.Class.cast(Class.java:3369)
    at org.glassfish.jersey.internal.ServiceFinder$LazyObjectIterator.hasNext(ServiceFinder.java:714)
    at org.glassfish.jersey.internal.inject.Injections.lookupService(Injections.java:112)
    at org.glassfish.jersey.internal.inject.Injections.lookupInjectionManagerFactory(Injections.java:97)
    at org.glassfish.jersey.internal.inject.Injections.createInjectionManager(Injections.java:68)
    at org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:432)
    at org.glassfish.jersey.internal.util.collection.Values$LazyValueImpl.get(Values.java:341)
    at org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:826)
    at org.glassfish.jersey.client.ClientRequest.getConfiguration(ClientRequest.java:285)
    at org.glassfish.jersey.client.JerseyInvocation.validateHttpMethodAndEntity(JerseyInvocation.java:143)
    at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:112)
    at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:108)
    at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:99)
    at org.glassfish.jersey.client.JerseyInvocation$AsyncInvoker.method(JerseyInvocation.java:706)
    at org.glassfish.jersey.client.JerseyInvocation$AsyncInvoker.get(JerseyInvocation.java:566)

这可能是与类加载器相关的问题吗?因为使用http客户机的代码是作为插件加载的,带有一个单独的类加载器。

共有1个答案

东门俊民
2023-03-14

这当然是一个类加载器问题;我最近在泽西2.35上也遇到了同样的问题。据我所知,依赖注入体系结构方面的Jersey内部已经发生了变化(请参阅本文:Wypiperz答案)。

上述情况是由于“类加载器阴影”(如果有这样一个术语)造成的。争用发生在容器类加载器(在我的例子中是Tomcat JARClassLoader)和web应用类加载器(Tomcat的WebAppClassLoader)之间。

因为不同的类加载器加载的类被认为是不同的。因此,在您的情况下(和我的情况一样),“Hk2InjectionManagerFactory”类和“InjectionManagerFactory”类是由不同的类装入器装入的,因此赋值失败,出现类强制转换异常。

在我的例子中,问题是,我在web app和Tomcat common loader(容器类路径)上都有“jersey common”和“jersey client”。这就造成了问题。

解决方案是将所有与Jersey相关的类移到WEB-INF/lib,并将依赖Jersey客户端的库移到WEB-INF-lib。

此外,如果有任何其他与jersey相关的JAR的旧版本,也要检查您的类路径(容器类路径)。

 类似资料:
  • 我已经完成了在glassfish v4中添加SSL证书的步骤。我已经通过浏览器和java swing客户端验证了它的有效性(我在客户端使用apache的http客户端库) 什么不工作是管理控制台!由于成功导入SSL,我不能再连接到管理控制台,http://www.myhost.com:4848,我仍然得到登录屏幕,总是工作的管理员用户名/密码组合已停止工作。我也注意到当尝试部署一个网络应用程序从n

  • 问题内容: 我正在下载Java EE,似乎有许多不同的下载选项。我不确定应该选择哪一个。Java EE似乎与GlassFish打包在一起。谁能告诉我这是什么,它对我有什么好处? 其次,如果我只是想玩转并了解Java EE,那么对我来说下载的是什么?列出选项的链接在下面… Java EE下载选项 问题答案: 首先,将近五年前它被称为Java EE。首字母缩略词J2EE仍指5.0之前的旧Java EE

  • 我将mysql驱动程序放入glassfish/admin1/lib,我在尝试与GlassFish 3.1.2建立连接时收到此错误 为SimpleCRUD_ConnectionPool Ping连接池失败。类名错误或未为:com设置类路径。mysql。jdbc。jdbc2。可选择的MysqlDataSource请检查服务器。记录更多细节。 野兔配置: 池名称:SimpleCRUD_Connectio

  • 这是我在尝试更改主密码时看到的。。。我尝试了几乎所有字符、数字、特殊字符的组合/home/larry$/home/glassfish/bin/asadmin更改主密码--savemasterpassword=true输入当前主密码

  • 我使用的是我在中创建了一个webapp,并添加了api到我的项目中,代码没有显示错误,但是当我运行servlet时,会出现以下错误。

  • 我试图在Netbeans中运行一个非常基本的servlet ContextListener程序。我已经很好地编码了它,但是在最后时刻,当我试图执行它的时候,程序的输出标签给了我如下所示的错误.. 这是我的ContextListener.java档案 这是网络.xml Netbeans没有显示任何语法错误。servlet文件是Netbeans IDE生成的默认文件。令人困惑的是…当我试图在没有侦听器