如何部署 apache CXF rest app to Weblogic

Weblogic 默认只支持JAX-RS 2.0和Jersey,不直接兼容Apache CXF。为解决此问题,需要在weblogic.xml中配置filter classloader,并将CXF所需的jar包放入WEB-INF/lib目录。首先部署一个纯JAX-RS应用,设置部署顺序为50,然后部署CXF应用以实现顺利部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Weblogic 只支持默认的JAX-RS 2.0 API 和 Jersey 。 不支持Apache CXF rest api .

如果不使用如下步骤就会出现这个Exception:

 weblogic.application.ModuleException: java.lang.LinkageError: ClassCastException: attempting to castzip: .../user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_user/myCXFApp/o6f99o/war/WEB-INF/lib/javax.ws.rs-api-2.1.jar!/javax/ws/rs/ext/RuntimeDelegate.class to jar:file:weblogic/oracle_common/modules/javax.ws.rs.javax.ws.rs-api.jar!/javax/ws/rs/ext/RuntimeDelegate.class
  1. 创建 weblogic.xml 设置 filter classloader 从war 包中加载 class.
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app
    xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-application"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd
http://xmlns.oracle.com/weblogic/weblogic-web-app
http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">

    <wls:weblogic-version>12.2.1</wls:weblogic-version>
    <container-descriptor>
        <show-archived-real-path-enabled>true</show-archived-real-path-enabled>  
        <prefer-web-inf-classes>false</prefer-web-inf-classes>
        <wls:prefer-application-resources>
            <wls:resource-name>META-INF/services/*</wls:resource-name>
            <wls:resource-name>javax.jws.*</wls:resource-name> 
            <wls:resource-name>javax.ws.rs.*</wls:resource-name> 
            <wls:resource-name>com.ctc.wstx.*</wls:resource-name>
            <wls:resource-name>javax.wsdl.*</wls:resource-name>
            <wls:resource-name>org.apache.cxf.*</wls:resource-name>
            <wls:resource-name>org.aspectj.*</wls:resource-name>
            <wls:resource-name>org.slf4j</wls:resource-name>
            <wls:resource-name>org.apache.*</wls:resource-name>
            <wls:resource-name>org.springframework.*</wls:resource-name>
            <wls:resource-name>com.fasterxml.jackson.*</wls:resource-name>
        </wls:prefer-application-resources>
        <wls:prefer-application-packages>
            <wls:package-name>javax.jws.*</wls:package-name> 
            <wls:package-name>javax.ws.rs.*</wls:package-name> 
            <wls:package-name>com.ctc.wstx.*</wls:package-name>
            <wls:package-name>javax.wsdl.*</wls:package-name>
            <wls:package-name>org.apache.cxf.*</wls:package-name>
            <wls:package-name>org.aspectj.*</wls:package-name>
            <wls:package-name>org.slf4j</wls:package-name>
            <wls:package-name>org.apache.*</wls:package-name>
            <wls:package-name>org.springframework.*</wls:package-name>
            <wls:package-name>com.fasterxml.jackson.*</wls:package-name>
        </wls:prefer-application-packages>
    </container-descriptor>
</wls:weblogic-web-app>
  1. 在 WEB-INF/lib 目录中 加入所有apache cxf 所需的 jar 包。
    必须有: jax-rs api cxf-rt-frontend-jaxrs.jar
    lib中的部分 jar
  2. 下面就是 做一个 CLASSloader magic 了。
    先部署一个 简单的 纯 JAX-RS api 实现的rest app. 部署成功以后 设置 这个应用的 部署顺序为 50.(小于100的一个数字都可以)。
  3. 部署 CXF 应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值