WebLogic 12.2.1部署时抛出NullPointerException问题求助
结合你描述的场景——NetBeans本地部署正常,用WebLogic管理工具手动部署就抛出NPE,再加上你用到的Jersey+Genson配置,我整理了几个大概率的原因和对应的解决办法:
1. 检查WAR包的依赖完整性
NetBeans在本地部署时,会自动帮你把项目依赖的JAR包(比如Genson、Jersey相关组件)加载到部署路径里,但手动打包WAR时如果配置不到位,很容易漏掉这些关键依赖。你可以这么做:
- 解压你的WAR包,查看
WEB-INF/lib目录下是否包含genson.jar、jersey-server.jar、jersey-container-servlet.jar这些必要文件; - 如果用Maven管理依赖,确保这些依赖的
<scope>设置为compile(不要用provided,除非你确认WebLogic自带了完全匹配的版本),这样打包时会自动把它们纳入WAR包。
2. 处理WebLogic的类加载冲突
WebLogic 12.2.1本身自带了Jersey的实现,很可能和你应用中引入的Jersey版本不一致,导致类加载时出现冲突,进而触发NPE。解决办法是在WAR包的WEB-INF目录下添加weblogic.xml文件,配置优先加载应用自身的类:
<?xml version="1.0" encoding="UTF-8"?> <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd"> <container-descriptor> <prefer-application-packages> <package-name>javax.ws.rs.*</package-name> <package-name>org.glassfish.jersey.*</package-name> <package-name>com.owlike.genson.*</package-name> </prefer-application-packages> </container-descriptor> </weblogic-web-app>
这个配置会让WebLogic优先加载你应用内的Jersey和Genson相关类,而非自带的版本。
3. 补全并校验ApplicationConfig代码
你贴的代码里public class ApplicationConfig e...明显不完整,正常的实现应该是继承ResourceConfig并完成初始化逻辑,比如:
import com.owlike.genson.ext.jaxrs.GensonJsonConverter; import javax.ws.rs.ApplicationPath; import org.glassfish.jersey.server.ResourceConfig; @ApplicationPath("service") public class ApplicationConfig extends ResourceConfig { public ApplicationConfig() { // 注册Genson JSON转换器 register(GensonJsonConverter.class); // 扫描你的REST资源类所在的包 packages("com.your.package.resources"); } }
如果构造方法里有错误的初始化逻辑(比如注册不存在的类、未正确扫描资源包),也可能导致初始化时抛出NPE。
4. 查看WebLogic的详细日志
NPE的完整堆栈信息是定位问题的关键,你可以到WebLogic的日志目录(一般是domain_home/servers/你的服务器名/logs)里找到server.log,查看异常的具体触发位置。比如如果是Genson初始化时找不到类,那就是依赖缺失;如果是Jersey类加载失败,那就是类冲突的问题。
内容的提问来源于stack exchange,提问作者Nícolas Schirmer

