Weblogic 升级到 12c:部署失败,因为 url 映射到多个 servlet [英] Weblogic upgrade to 12c: deployment fails because url mapped to multiple servlet
问题描述
我最近设置了一个新的 Weblogic 12c 环境.在部署我知道可以在 Weblogic 11g 中运行的应用程序时,我收到错误 Web 应用程序中的 url-pattern/resources/* 映射到多个 Servlet."
它所指的映射位于正在部署的 application.ear 内的 web.xml 中,但它只映射一次:
<servlet-name>速度</servlet-name><url-pattern>/resources/*</url-pattern></servlet-mapping>
该项目不包含对 url 模式/resources/* 的任何其他引用,有人可以解释重复映射的来源以及我如何解决它吗?
我能找到的最接近的问题是:https://bugster.forgerock.org/jira/si/jira.issueviews:issue-html/OPENAM-7947/OPENAM-7947.html,已被标记为不可重现.>
来自部署的完整堆栈跟踪:
<错误><部署者><BEA-149205><无法初始化应用程序"由于错误 weblogic.application.ModuleException: weblogic.management.DeploymentException: [HTTP:101401]The url-pattern/resources/* 在 Web 应用程序 中映射到多个 Servlet.weblogic.application.ModuleException: weblogic.management.DeploymentException: [HTTP:101401] Web 应用程序 中的 url-pattern/resources/*映射到多个 Servlet.在 weblogic.application.internal.ExtensibleModuleWrapper.prepare(ExtensibleModuleWrapper.java:114)在 weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:100)在 weblogic.application.internal.flow.ModuleStateDriver$1.next(ModuleStateDriver.java:192)在 weblogic.application.internal.flow.ModuleStateDriver$1.next(ModuleStateDriver.java:187)在 weblogic.application.utils.StateMachineDriver$ParallelChange.run(StateMachineDriver.java:83)在 weblogic.application.utils.StateMachineDriver.nextStateInParallel(StateMachineDriver.java:144)在 weblogic.application.internal.flow.ModuleStateDriver.parallelPrepare(ModuleStateDriver.java:46)在 weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:75)在 weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:55)在 weblogic.application.internal.BaseDeployment$1.next(BaseDeployment.java:731)在 weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)在 weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:243)在 weblogic.application.internal.EarDeployment.prepare(EarDeployment.java:66)在 weblogic.application.internal.DeploymentStateChecker.prepare(DeploymentStateChecker.java:158)在 weblogic.deploy.internal.targetserver.AppContainerInvoker.prepare(AppContainerInvoker.java:65)在 weblogic.deploy.internal.targetserver.AppDeployment.prepare(AppDeployment.java:158)在 weblogic.management.deploy.internal.DeploymentAdapter$1.doPrepare(DeploymentAdapter.java:41)在 weblogic.management.deploy.internal.DeploymentAdapter.prepare(DeploymentAdapter.java:193)在 weblogic.management.deploy.internal.AppTransition$1.transitionApp(AppTransition.java:31)在 weblogic.management.deploy.internal.ConfiguredDeployments$2.doItem(ConfiguredDeployments.java:684)在 weblogic.management.deploy.internal.parallel.BucketInvoker.invoke(BucketInvoker.java:138)在 weblogic.management.deploy.internal.ConfiguredDeployments.transitionAppsParallel(ConfiguredDeployments.java:692)在 weblogic.management.deploy.internal.ConfiguredDeployments.prepare(ConfiguredDeployments.java:322)在 weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:202)在 weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:207)在 weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:129)在 weblogic.server.AbstractServerService.postConstruct(AbstractServerService.java:76)在 sun.reflect.GeneratedMethodAccessor2.invoke(未知来源)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在 java.lang.reflect.Method.invoke(Method.java:498)在 org.glassfish.hk2.utilities.reflection.ReflectionHelper.invoke(ReflectionHelper.java:1262)在 org.jvnet.hk2.internal.ClazzCreator.postConstructMe(ClazzCreator.java:332)在 org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:374)在 org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)在 org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:232)在 org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:85)在 org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2020)在 org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:114)在 org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:88)在 org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.oneJob(CurrentTaskFuture.java:1213)在 org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.run(CurrentTaskFuture.java:1144)在 weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:666)在 weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)在 weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)在 weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)在 weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)在 weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640)在 weblogic.work.ExecuteThread.execute(ExecuteThread.java:406)在 weblogic.work.ExecuteThread.run(ExecuteThread.java:346)
如果在 java 代码中使用 web 注释,则不必再在 web.xml 文件中声明 servlet.
您可以尝试去掉 web.xml 中相应的servlet"和servlet-mapping"标签
似乎 WebLogic 12.1.3 可以处理双重声明(内联注释和 xml),但在 WebLogic 12.2 中不再处理.
当我指定serviceName"参数以及在 web.xml 文件中使用相同值声明 servlet 时,@webservice 注释出现此错误.
I've recently setup a new Weblogic 12c environment. On deploying an application that I know works in Weblogic 11g I get the error "The url-pattern /resources/* in web application is mapped to multiple Servlets."
The mapping it's referring to is in the web.xml inside the application.ear that's being deployed, but it's only mapped once:
<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
The project doesn't contain any other references to the url pattern /resources/*, can someone explain where the duplicated mapping is coming from and how I can work around it?
The closest issue I could find is this: https://bugster.forgerock.org/jira/si/jira.issueviews:issue-html/OPENAM-7947/OPENAM-7947.html, which has been marked as unreproducible.
Full stack trace from deployment:
<Error> <Deployer> <BEA-149205> <Failed to initialize the application "<application_name>" due to error weblogic.application.ModuleException: weblogic.management.DeploymentException: [HTTP:101401]The url-pa
ttern /resources/* in web application <application_name> is mapped to multiple Servlets.
weblogic.application.ModuleException: weblogic.management.DeploymentException: [HTTP:101401]The url-pattern /resources/* in web application <application_name> is mapped to multiple Servlets.
at weblogic.application.internal.ExtensibleModuleWrapper.prepare(ExtensibleModuleWrapper.java:114)
at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:100)
at weblogic.application.internal.flow.ModuleStateDriver$1.next(ModuleStateDriver.java:192)
at weblogic.application.internal.flow.ModuleStateDriver$1.next(ModuleStateDriver.java:187)
at weblogic.application.utils.StateMachineDriver$ParallelChange.run(StateMachineDriver.java:83)
at weblogic.application.utils.StateMachineDriver.nextStateInParallel(StateMachineDriver.java:144)
at weblogic.application.internal.flow.ModuleStateDriver.parallelPrepare(ModuleStateDriver.java:46)
at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:75)
at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:55)
at weblogic.application.internal.BaseDeployment$1.next(BaseDeployment.java:731)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
at weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:243)
at weblogic.application.internal.EarDeployment.prepare(EarDeployment.java:66)
at weblogic.application.internal.DeploymentStateChecker.prepare(DeploymentStateChecker.java:158)
at weblogic.deploy.internal.targetserver.AppContainerInvoker.prepare(AppContainerInvoker.java:65)
at weblogic.deploy.internal.targetserver.AppDeployment.prepare(AppDeployment.java:158)
at weblogic.management.deploy.internal.DeploymentAdapter$1.doPrepare(DeploymentAdapter.java:41)
at weblogic.management.deploy.internal.DeploymentAdapter.prepare(DeploymentAdapter.java:193)
at weblogic.management.deploy.internal.AppTransition$1.transitionApp(AppTransition.java:31)
at weblogic.management.deploy.internal.ConfiguredDeployments$2.doItem(ConfiguredDeployments.java:684)
at weblogic.management.deploy.internal.parallel.BucketInvoker.invoke(BucketInvoker.java:138)
at weblogic.management.deploy.internal.ConfiguredDeployments.transitionAppsParallel(ConfiguredDeployments.java:692)
at weblogic.management.deploy.internal.ConfiguredDeployments.prepare(ConfiguredDeployments.java:322)
at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:202)
at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:207)
at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:129)
at weblogic.server.AbstractServerService.postConstruct(AbstractServerService.java:76)
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.glassfish.hk2.utilities.reflection.ReflectionHelper.invoke(ReflectionHelper.java:1262)
at org.jvnet.hk2.internal.ClazzCreator.postConstructMe(ClazzCreator.java:332)
at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:374)
at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)
at org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:232)
at org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:85)
at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2020)
at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:114)
at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:88)
at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.oneJob(CurrentTaskFuture.java:1213)
at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.run(CurrentTaskFuture.java:1144)
at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:666)
at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:406)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)
If you use web annotations in java code, you don't have to declare the servlet in the web.xml file any more.
You can try by removing the corresponding "servlet" and "servlet-mapping" tags in web.xml
It seems that WebLogic 12.1.3 can deal with double declaration (inline annotation & xml) but not anymore in WebLogic 12.2.
I had this error with @webservice annotation when I specified the "serviceName" parameter and when I declared the servlet in web.xml file with the same value.
这篇关于Weblogic 升级到 12c:部署失败,因为 url 映射到多个 servlet的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!