【问题标题】:Classloading issue implementing REST client实现 REST 客户端的类加载问题
【发布时间】:2017-11-20 07:47:35
【问题描述】:

我有一个在 Tomcat 8 上运行的 Web 应用程序(Windows 10,JRE 1.8.0_111) 实现 REST 客户端以与第 3 部分 REST 服务进行通信 (ADLNET xAPI LRS)

当我最近将该 WAR 文件部署到不同的服务器(CentOS、Tomcat 8、Java 1.8.0.11)应用程序给出ClassNotFound异常:

java.lang.ClassNotFoundException: org.glassfish.hk2.utilities.reflection.Logger

我在 WEB-INF/lib 文件夹中有以下 JAR

*jxapi-1.0.3.jar(由 ADLNET xAPI 项目提供) *hk2-api-2.4.0.jar *cxf-bundle-jaxrs-2.7.18.jar *jaxrs-ri-2.25.1.jar *jersey-guava-2.25.1.jar

在使用“-verbose:class”运行应用程序时,我发现两种情况下的类加载顺序不同。在错误情况下, 'cxf-bundle-jaxrs-2.7.18.jar' 根本没有被使用。

catalina.out(正常情况下)

…… [从文件加载 org.glassfish.jersey.client.JerseyWebTarget:/C:/Users/Diptendu/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/LearnITyLMSv9/WEB-INF/ lib/jaxrs-ri-2.25.1.jar] [从文件加载 javax.ws.rs.core.UriBuilder:/C:/Users/Diptendu/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/LearnITyLMSv9/WEB-INF/ lib/jaxrs-ri-2.25.1.jar] [从文件加载 javax.ws.rs.ext.RuntimeDelegate:/C:/Users/Diptendu/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/LearnITyLMSv9/WEB-INF/ lib/jaxrs-ri-2.25.1.jar] [从文件加载 javax.ws.rs.ext.FactoryFinder:/C:/Users/Diptendu/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/LearnITyLMSv9/WEB-INF/ lib/jaxrs-ri-2.25.1.jar] [从文件加载 javax.ws.rs.ext.FactoryFinder$1:/C:/Users/Diptendu/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/LearnITyLMSv9/WEB-INF /lib/jaxrs-ri-2.25.1.jar] [从文件加载 org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl:/C:/Users/Diptendu/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/LearnITyLMSv9/WEB- INF/lib/cxf-bundle-jaxrs-2.7.18.jar] [从文件加载 javax.ws.rs.core.Variant$VariantListBuilder:/C:/Users/Diptendu/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/LearnITyLMSv9/WEB- INF/lib/jaxrs-ri-2.25.1.jar] [从文件加载 org.apache.cxf.jaxrs.impl.VariantListBuilderImpl:/C:/Users/Diptendu/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/LearnITyLMSv9/WEB- INF/lib/cxf-bundle-jaxrs-2.7.18.jar] [从文件加载 javax.ws.rs.core.Response$ResponseBuilder:/C:/Users/Diptendu/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/LearnITyLMSv9/WEB- INF/lib/jaxrs-ri-2.25.1.jar] ......

catalina.out(错误情况)

…… [从文件加载 org.glassfish.jersey.client.JerseyWebTarget:/opt/tomcat8/webapps/LearnITyAcademy/WEB-INF/lib/jaxrs-ri-2.25.1.jar] 信息 |虚拟机 1 | 2017/06/17 17:56:50 | [从文件加载 javax.ws.rs.core.UriBuilder:/opt/tomcat8/webapps/LearnITyAcademy/WEB-INF/lib/jaxrs-ri-2.25.1.jar] 信息 |虚拟机 1 | 2017/06/17 17:56:50 | [从文件加载 javax.ws.rs.ext.RuntimeDelegate:/opt/tomcat8/webapps/LearnITyAcademy/WEB-INF/lib/jaxrs-ri-2.25.1.jar] 信息 |虚拟机 1 | 2017/06/17 17:56:50 | [从文件加载 javax.ws.rs.ext.FactoryFinder:/opt/tomcat8/webapps/LearnITyAcademy/WEB-INF/lib/jaxrs-ri-2.25.1.jar] 信息 |虚拟机 1 | 2017/06/17 17:56:50 | [从文件加载 javax.ws.rs.ext.FactoryFinder$1:/opt/tomcat8/webapps/LearnITyAcademy/WEB-INF/lib/jaxrs-ri-2.25.1.jar] 信息 |虚拟机 1 | 2017/06/17 17:56:50 | [从文件加载 org.glassfish.jersey.internal.AbstractRuntimeDelegate:/opt/tomcat8/webapps/LearnITyAcademy/WEB-INF/lib/jaxrs-ri-2.25.1.jar] 信息 |虚拟机 1 | 2017/06/17 17:56:50 | [从文件加载 org.glassfish.jersey.server.internal.RuntimeDelegateImpl:/opt/tomcat8/webapps/LearnITyAcademy/WEB-INF/lib/jaxrs-ri-2.25.1.jar] 信息 |虚拟机 1 | 2017/06/17 17:56:50 | [从文件加载 org.glassfish.jersey.uri.internal.JerseyUriBuilder:/opt/tomcat8/webapps/LearnITyAcademy/WEB-INF/lib/jaxrs-ri-2.25.1.jar] 信息 |虚拟机 1 | 2017/06/17 17:56:50 | [从文件加载 javax.ws.rs.core.Response$ResponseBuilder:/opt/tomcat8/webapps/LearnITyAcademy/WEB-INF/lib/jaxrs-ri-2.25.1.jar] 信息 |虚拟机 1 | 2017/06/17 17:56:50 | [从文件加载 org.glassfish.jersey.message.internal.OutboundJaxrsResponse$Builder:/opt/tomcat8/webapps/LearnITyAcademy/WEB-INF/lib/jaxrs-ri-2.25.1.jar] 信息 |虚拟机 1 | 2017/06/17 17:56:50 |

这里可能出了什么问题?

【问题讨论】:

    标签: java rest tomcat jersey


    【解决方案1】:

    可能是WEB-INF中的jar文件损坏了,所以用新版本更新依赖并添加新依赖:-

    <dependency>
        <groupId>org.glassfish.hk2</groupId>
        <artifactId>hk2-utils</artifactId>
        <version>2.5.0-b35</version>
    </dependency>
    

    并更新项目并导出 WAR 文件。

    【讨论】:

    • 其实我确实在Linux服务器上添加了hk2-utils,但它导致了其他错误!在此之前,我将 WAR 文件从 Linux 服务器下载到 Windows 服务器,它运行没有任何问题!
    猜你喜欢
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2014-07-15
    相关资源
    最近更新 更多