You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liberty 21.0.0.6部署JAX-RS应用出现init()类转换异常求助

问题描述

基于JAX-RS开发的Web服务应用,部署到Linux环境的Liberty 21.0.0.6运行时触发初始化异常,但在本地Windows端同版本Liberty中运行正常无报错,公开渠道可查的解决方案均未生效,具体错误信息和配置如下:

异常日志

E SRVE0271E: Uncaught init() exception created by servlet [JAX-RS Servlet] in application [ABC_WSv2.1]: java.lang.ClassCastException: com.abc.occws.SearchingApplication incompatible with javax.ws.rs.core.Application

server.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">

    <!-- Enable features -->
    
       <featureManager>
        <feature>webProfile-8.0</feature>
        </featureManager>
    
    
    <!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
    <httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint" />
  
    <dataSource id="ABCDataSource" jndiName="jdbc/ABCDS" queryTimeout="20m" type="javax.sql.DataSource">
    <connectionManager agedTimeout="1000m" minPoolSize="1" numConnectionsPerThreadLocal="10"/>
    <jdbcDriver libraryRef="OracleLib"/>
    <properties.oracle URL="jdbc:oracle:thin:@//10.135.157.5:1565/DOABC_APP" password="xxx" user="xxxx"/>                 
    </dataSource>
                      
     <!-- Define JDBC Drivers -->
  
    <library id="OracleLib">
    <file name="C:/dev/Liberty/ojdbc8-19.3.0.0.jar"/> 
    </library>
  
    <applicationMonitor updateTrigger="mbean" />    
    
    <application id="ABC_WSv2.1" location="C:\Dev\Liberty\ABC_WSv2.1.ear" name="ABC_WSv2.1" type="ear" context-root="/abc-ws">
    <classloader commonLibraryRef="OracleLib"/>
  </application>
  <webContainer uppressHtmlRecursiveErrorOutput="true"/>

</server>
排查思路与解决方案
  • 优先排查应用包内依赖冲突:webProfile-8.0特性已经内置了JAX-RS 2.1实现以及javax.ws.rs相关API包,如果你的EAR/WAR包内也打包了javax.ws.rs-api、jersey、resteasy等JAX-RS相关依赖,会导致两个不同类加载器加载的javax.ws.rs.core.Application类实例出现类型不兼容问题。Windows环境运行正常是因为不同操作系统下Liberty的类加载顺序存在差异,优先加载了容器内置的API类,没有触发冲突。
    解决方法:将应用打包配置中JAX-RS相关的API、实现依赖的scope改为provided,打包时排除这些依赖,统一使用Liberty容器提供的版本。
  • 修正Linux环境下的路径配置:你提供的server.xml中用的是Windows格式的路径,部署到Linux时需要将Oracle库路径、EAR包路径替换为Linux下的实际绝对路径,路径加载错误会引发连锁类加载异常。
  • 显式指定JAX-RS特性:可以在featureManager节点下额外添加jaxrs-2.1特性,避免webProfile特性加载不全的问题:
    <featureManager>
      <feature>webProfile-8.0</feature>
      <feature>jaxrs-2.1</feature>
    </featureManager>
    
  • 调整类加载优先级:如果确认不能排除应用内的JAX-RS依赖,可以在application节点的classloader配置中添加parentLast="true"属性,让应用类加载器优先加载自身包里的类:
    <application id="ABC_WSv2.1" location="Linux环境下EAR包的实际路径" name="ABC_WSv2.1" type="ear" context-root="/abc-ws">
      <classloader commonLibraryRef="OracleLib" parentLast="true"/>
    </application>
    
  • 核对类继承关系:确认SearchingApplication类确实直接或间接继承了javax.ws.rs.core.Application,没有误引入jakarta.ws.rs包下的同名类导致类型不匹配。

内容的提问来源于stack exchange,提问作者Ambar Majumdar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:27:02