weblogic.management.DeploymentException: Application XYZ is a WAR file, but it contains > 1 component
Case
I have a WAR which exposes RMI services via a servlet. It has perfectly worked for months. This afternoon, while redeploying it I got this error:
weblogic.management.DeploymentException: Application Jonathan-rmi-server is a WAR file, but it contains > 1 component
Complete Stacktrace
weblogic.management.DeploymentException: Application Jonathan-rmi-server is a WAR file, but it contains > 1 component. at weblogic.servlet.internal.WarDeployment.createModule(WarDeployment.java:40) at weblogic.servlet.internal.WarDeployment.<init>(WarDeployment.java:27) at weblogic.servlet.internal.WarDeploymentFactory.createDeployment(WarDeploymentFactory.java:36) at weblogic.application.internal.DeploymentManagerImpl.createDeployment(DeploymentManagerImpl.java:84) at weblogic.deploy.internal.targetserver.BasicDeployment.createDeployment(BasicDeployment.java:149) at weblogic.deploy.internal.targetserver.operations.ActivateOperation.createAndPrepareContainer(ActivateOperation.java:202) at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doPrepare(ActivateOperation.java:98) at weblogic.deploy.internal.targetserver.operations.AbstractOperation.prepare(AbstractOperation.java:217) at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentPrepare(DeploymentManager.java:747) at weblogic.deploy.internal.targetserver.DeploymentManager.prepareDeploymentList(DeploymentManager.java:1216) at weblogic.deploy.internal.targetserver.DeploymentManager.handlePrepare(DeploymentManager.java:250) at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.prepare(DeploymentServiceDispatcher.java:159) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doPrepareCallback(DeploymentReceiverCallbackDeliverer.java:171) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$000(DeploymentReceiverCallbackDeliverer.java:13) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$1.run(DeploymentReceiverCallbackDeliverer.java:46) at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201) at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
Quick fix
Google does not give much information on this error. Anyway, I found this link: WebLogic9 Avoid new lines for attributes in the weblogic.xml . In my case it was not relevant, since my WAR was a classic one, deployable under any application server, and not specifically WebLogic.
Yet, to fix the issue, I had to split the redeploy operation into two phases undeploy and deploy. I could do that either using WebLogic console, or with Maven, ie replacing
mvn package weblogic:deploy
with
mvn package weblogic:undeploy weblogic:deploy