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
- 创建 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>
- 在 WEB-INF/lib 目录中 加入所有apache cxf 所需的 jar 包。
必须有: jax-rs api cxf-rt-frontend-jaxrs.jar
- 下面就是 做一个 CLASSloader magic 了。
先部署一个 简单的 纯 JAX-RS api 实现的rest app. 部署成功以后 设置 这个应用的 部署顺序为 50.(小于100的一个数字都可以)。 - 部署 CXF 应用程序。