weblogic异常之 java.lang.NoClassDefFoundError: javax/jws/WebService

本文记录了一次在WebLogic服务器上部署应用时遇到的异常情况,详细分析了由于类加载问题导致的部署失败,并提供了去除特定配置项后的解决办法。

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

1.异常描述

<Nov 21, 2018 1:13:13 PM GMT+08:00> <Warning> <HTTP> <BEA-101377> <Filtering class loader configuration ignored for web module mq-proxy of application mq-proxy_ear> 
2018-11-21 13:13:19 [org.springframework.web.context.ContextLoader]-[ERROR] Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mqProxyService': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/jws/WebService
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1631)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:443)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:325)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
	at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:481)
	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
	at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
	at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:181)
	at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1871)
	at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3173)
	at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1529)
	at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:488)
	at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
	at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
	at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)
	at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247)
	at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
	at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
	at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27)
	at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:671)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
	at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:212)
	at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:59)
	at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
	at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:80)
	at weblogic.deploy.internal.targetserver.BasicDeployment.activate(BasicDeployment.java:187)
	at weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:379)
	at weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:51)
	at weblogic.management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:200)
	at weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:30)
	at weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments.java:240)
	at weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:169)
	at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:123)
	at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:180)
	at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:96)
	at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:263)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
Caused by: java.lang.NoClassDefFoundError: javax/jws/WebService
	at org.apache.cxf.jaxws.support.JaxWsImplementorInfo.initialize(JaxWsImplementorInfo.java:273)
	at org.apache.cxf.jaxws.support.JaxWsImplementorInfo.<init>(JaxWsImplementorInfo.java:60)
	at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:403)
	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:338)
	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:255)
	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:543)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1760)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1697)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1627)
	... 48 more
Caused by: java.lang.ClassNotFoundException: javax.jws.WebService
	at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
	at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
	at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
	at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:43)
	... 61 more
<Nov 21, 2018 1:13:19 PM GMT+08:00> <Warning> <HTTP> <BEA-101162> <User defined listener org.springframework.web.context.ContextLoaderListener failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mqProxyService': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/jws/WebService.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mqProxyService': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/jws/WebService
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1631)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
	Truncated. see log file for complete stacktrace
Caused By: java.lang.NoClassDefFoundError: javax/jws/WebService
	at org.apache.cxf.jaxws.support.JaxWsImplementorInfo.initialize(JaxWsImplementorInfo.java:273)
	at org.apache.cxf.jaxws.support.JaxWsImplementorInfo.<init>(JaxWsImplementorInfo.java:60)
	at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:403)
	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:338)
	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:255)
	Truncated. see log file for complete stacktrace
Caused By: java.lang.ClassNotFoundException: javax.jws.WebService
	at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
	at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
	at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	Truncated. see log file for complete stacktrace
> 
<Nov 21, 2018 1:13:19 PM GMT+08:00> <Error> <Deployer> <BEA-149231> <Unable to set the activation state to true for the application 'mq-proxy_ear'.
weblogic.application.ModuleException: 
	at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1531)
	at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:488)
	at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
	at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
	Truncated. see log file for complete stacktrace
Caused By: java.lang.ClassNotFoundException: javax.jws.WebService
	at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
	at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
	at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	Truncated. see log file for complete stacktrace
> 
<Nov 21, 2018 1:13:19 PM GMT+08:00> <Notice> <Log Management> <BEA-170027> <The Server has established connection with the Domain level Diagnostic Service successfully.> 
log4j:WARN No appenders could be found for logger (RocketmqRemoting).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
log4j:WARN No appenders could be found for logger (RocketmqRemoting).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
<Nov 21, 2018 1:13:19 PM GMT+08:00> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to ADMIN> 
<Nov 21, 2018 1:13:20 PM GMT+08:00> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RESUMING> 
<Nov 21, 2018 1:13:20 PM GMT+08:00> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 10.56.81.227:7001 for protocols iiop, t3, ldap, snmp, http.> 
<Nov 21, 2018 1:13:20 PM GMT+08:00> <Notice> <WebLogicServer> <BEA-000330> <Started WebLogic Managed Server "server_mq_proxy_dat_7001" for domain "admin_9001" running in Production Mode> 
<Nov 21, 2018 1:13:21 PM GMT+08:00> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING> 
<Nov 21, 2018 1:13:21 PM GMT+08:00> <Notice> <WebLogicServer> <BEA-000360> <Server started in RUNNING mode> 
Exception in thread "NettyClientWorkerThread_3" java.lang.NoClassDefFoundError: io/netty/util/concurrent/DefaultPromise$1
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:432)
	at io.netty.util.concurrent.DefaultPromise.setSuccess(DefaultPromise.java:94)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:939)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: io.netty.util.concurrent.DefaultPromise$1
	at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
	at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
	at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
	at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:43)
	... 4 more
Exception in thread "NettyClientWorkerThread_4" java.lang.NoClassDefFoundError: io/netty/util/concurrent/DefaultPromise$1
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:432)
	at io.netty.util.concurrent.DefaultPromise.setSuccess(DefaultPromise.java:94)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:939)
	at java.lang.Thread.run(Thread.java:745)
Exception in thread "NettyClientWorkerThread_1" java.lang.NoClassDefFoundError: io/netty/util/concurrent/DefaultPromise$1
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:432)
	at io.netty.util.concurrent.DefaultPromise.setSuccess(DefaultPromise.java:94)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:939)
	at java.lang.Thread.run(Thread.java:745)
Exception in thread "NettyClientWorkerThread_2" java.lang.NoClassDefFoundError: io/netty/util/concurrent/DefaultPromise$1
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:432)
	at io.netty.util.concurrent.DefaultPromise.setSuccess(DefaultPromise.java:94)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:939)
	at java.lang.Thread.run(Thread.java:745)
Exception in thread "NettyClientSelector_1" java.lang.NoClassDefFoundError: io/netty/util/concurrent/DefaultPromise$1
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:432)
	at io.netty.util.concurrent.DefaultPromise.setSuccess(DefaultPromise.java:94)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:939)
	at java.lang.Thread.run(Thread.java:745)

2.原因分析

在这里插入图片描述

weblogic-application.xml文件中会优先加载这些类
在这里插入图片描述

因此我把这行去掉了
就ok了
重启即可

`java.lang.NoClassDefFoundError: org/glassfish/jersey/servlet/webcomponent$5` 错误通常表明 WebLogic 服务器在运行时无法找到所需的 Jersey 库类。该问题的根本原因可能涉及类加载器的优先级配置不当、依赖库版本冲突或缺失。 ### 原因分析 1. **类加载器优先级配置不当** WebLogic 默认使用其自身的类加载器来加载应用所需的类。如果应用中自带了 Jersey 相关的 JAR 包,而 WebLogic 的系统类加载器优先加载了自己的版本,可能会导致类版本不一致或找不到特定类的问题。 2. **依赖库版本冲突** WebLogic 12c 自带了一些 Jersey 模块(如 Jersey 1.x 或 2.x),如果应用程序部署时引入了不同版本的 Jersey(例如通过 Maven 或手动添加 JAR 文件),就可能出现版本冲突,导致某些类无法正确加载。 3. **缺少必要的 JAR 文件** 如果项目中遗漏了 `jersey-servlet` 或其他相关模块的 JAR 文件,则在运行时会抛出 `NoClassDefFoundError`。 --- ### 解决方案 #### 1. 配置类加载器优先级 可以通过修改 `weblogic.xml` 文件,设置类加载器优先加载应用中的类而不是 WebLogic 提供的类: ```xml <container-descriptor> <prefer-web-inf-classes>true</prefer-web-inf-classes> </container-descriptor> ``` 此配置将确保应用优先使用 `WEB-INF/lib` 下的类库,从而避免与 WebLogic 自带的 Jersey 版本发生冲突 [^1]。 #### 2. 显式指定 Jersey 版本并排除冲突依赖 检查项目的构建文件(如 `pom.xml`)并确保只包含一个版本的 Jersey 依赖。例如,若希望使用 Jersey 2.x: ```xml <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.35</version> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.35</version> </dependency> ``` 同时,应排除 WebLogic 可能加载的旧版本 Jersey 模块: ```xml <container-descriptor> <prefer-application-packages> <package-name>javax.ws.rs.*</package-name> <package-name>org.glassfish.jersey.*</package-name> </prefer-application-packages> </container-descriptor> ``` 这样可以确保 WebLogic 使用应用提供的 Jersey 实现 [^1]。 #### 3. 手动验证和部署依赖 JAR 确保所有必需的 Jersey JAR 文件(如 `jersey-servlet.jar`)都已放置在应用的 `WEB-INF/lib` 目录中,并且没有被意外删除或遗漏。 #### 4. 升级或补丁 WebLogic 如果使用的是较旧的 WebLogic 12c 版本,建议升级到最新补丁版本,以支持更现代的 Jersey 版本并修复潜在的类加载问题。 --- ### 示例代码:Jersey 资源类 为了确保 Jersey 正确运行,以下是一个简单的资源类示例: ```java import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/hello") public class HelloResource { @GET @Produces(MediaType.TEXT_PLAIN) public String sayHello() { return "Hello, Jersey!"; } } ``` 此外,确保 `web.xml` 中配置了 Jersey 的 Servlet: ```xml <servlet> <servlet-name>JerseyServlet</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.example.rest</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JerseyServlet</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东山富哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值