Más de un fragmento con el nombre [spring_web] fue encontrado. Esto no es legal con pedidos relativos

9 minutos de lectura

Tengo una aplicación Spring Boot que funciona bien cuando la ejecuto con el servidor integrado de Intellj. Sin embargo, cuando lo empaqueto en un archivo .war y lo implemento en Tomcat, aparece el siguiente error:

    org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/file-upload-0.0.1-SNAPSHOT]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at 

     org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:985)
    at 
   org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at  
 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException: More than one fragment with the name [spring_web] was found. This is not legal with relative ordering. See section 8.2.2 2c of the Servlet specification for details. Consider using absolute ordering.
    at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2200)
    at 
  org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2159)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1124)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:769)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
    at 

 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5176)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 10 more

21-Jan-2019 01:51:04.709 SEVERE [localhost-startStop-1] 
     org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [C:UsersdennismoDevProjectsProduction Prepfile-upload-modulewebappsfile-upload-0.0.1-SNAPSHOT.war]
 java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/file-upload-0.0.1-SNAPSHOT]]
    at 

 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:758)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:985)
    at 


      org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)  

Mi proyecto no contiene varios fragmentos web, por lo que no sé qué podría estar causando este problema.

pom.xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from salaryPaymentRequestRepo -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <akka.version>2.5.17</akka.version>
    </properties>
    <repositories>
        <repository>
            <id>default</id>
            <url>http://repo.maven.apache.org/maven2</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.197</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.univocity</groupId>
            <artifactId>univocity-parsers</artifactId>
            <version>2.7.6</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>26.0-jre</version>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>2.23.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.11.0</version>
        </dependency>
        <dependency>
            <groupId>ma.glasnost.orika</groupId>
            <artifactId>orika-core</artifactId>
            <version>1.4.2</version><!-- or latest version -->
            <exclusions>
                <exclusion>
                    <artifactId>javassist</artifactId>
                    <groupId>org.javassist</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-actor_2.12</artifactId>
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-stream_2.12</artifactId>
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-persistence_2.12</artifactId>
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-testkit_2.12</artifactId>
            <version>${akka.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>12.1.0.2</version>
            <scope>system</scope>
            <systemPath>${basedir}/src/main/resources/lib/ojdbc7-12.1.0.jar</systemPath>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

  • Parece que este es un cambio introducido en tomcat 7.0.93 FWIW…

    – rogerdpack

    06 jul. 2020 20:19

  • Si usa la configuración JAVA, encuentre su respuesta en stackoverflow.com/questions/57626140/….

    – Ümer Khalid

    22 nov.

agregar <absolute-ordering /> etiqueta a tu web.xml justo debajo del <display-name> etiqueta. Deberia trabajar.

  • ¡Excelente! Era una parte crítica de la solución que necesitábamos y no podríamos haberlo hecho sin ustedes. Publiqué nuestra solución completa en stackoverflow.com/questions/57332888

    – DavesPlanet

    02 ago. 19 en 20:12

  • Estoy usando una configuración basada en Java y no tengo ningún archivo xml, entonces, ¿qué debo hacer?

    – KJEjava48

    18 ago. 19 en 16:42

  • Para cualquiera que desee más información, tuve la misma excepción que también decía “Consulte la sección 8.2.2 2c de la especificación de Servlet para obtener más detalles. Considere usar un pedido absoluto”…. aquí está esa sección: c. Excepción de nombre duplicado: si, al atravesar los fragmentos web, se encuentran varios miembros con el mismo elemento , la aplicación debe registrar un mensaje de error informativo que incluya información para ayudar a solucionar el problema y no debe implementarse. Por ejemplo, una forma de solucionar este problema es que el usuario utilice el orden absoluto, en cuyo caso se ignora el orden relativo.

    –Michael Stalcup

    20 ago. 19 en 15:01

  • @Roman Sterlin Tengo el mismo error, pero no puedo usar su solución porque está en mi aplicación Spring Boot donde no necesito usar un web.xml. Entonces, ¿qué haré para resolver esto?

    – KJEjava48

    23 ago. 19 en 16:07

Parece que tiene dos versiones diferentes de Spring, verifique sus dependencias para ver si tiene una dependencia con otra versión de Spring.

mvn dependency:tree -Dverbose -Dincludes=groupId:artifactId

  • ¿Cuál es el uso de mvn dependency:tree -Dverbose -Dincludes=groupId:artifactId . ¿Dónde debo usar esto?

    – KJEjava48

    18 ago. 19 en 16:42

  • Ejecútelo en su terminal en la raíz del proyecto Maven para localizar las dependencias en conflicto. Documentación oficial de Maven

    –David Simonsbacka

    19 ago. 19 en 17:32


  • Para Gradle, puede usar la opción DependencyInsight, que se encuentra más en el documentación.

    –David Simonsbacka

    26 ago. 19 en 06:13

  • Cómo usar la opción dependencyInsight en gradle, ¿dónde debería encontrarla? ese enlace no funciona

    – KJEjava48

    06 oct.

La limpieza del servidor funcionó para mí. Solo haz lo siguiente:

Haga clic derecho en el servidor -> Limpiar.

Luego vuelva a implementar la aplicación en el servidor.

  • Esto funcionó para mí en Eclipse IDE, +1, gracias.

    – usuario1821961

    01 dic. 2020 a las 19:37


  • Solo esta respuesta me ayudó. ¡¡Muchísimas gracias!!

    – Carlos UCR

    30 sep.

Mas de un fragmento con el nombre spring web fue encontrado
pardha saradhi

Este problema se resolvió agregando un orden absoluto de los descriptores de implementación.

La etiqueta <absolute-ordering/> fue añadido a la web.xml

Referencia:

https://www.oracle.com/technetwork/articles/javaee/javaee6overview-part2-136353.html

  • Sí, esto funcionó para mí también. Esp. en desarrollo, el directorio WEB-INF/lib de la aplicación web implementada no se vacía solo por una nueva implementación; debe limpiarlo. Entonces, si actualiza Spring, puede obtener varias versiones en el directorio lib temporalmente.

    –Robert Watkins

    18 oct.

  • Recibo errores al actualizar Spring 2.3.1 a cualquier versión superior. Además, limpiar la carpeta de la aplicación web no funcionó para mí.

    –Michael Hegner

    17 dic. 2020 a las 12:00

Tuve el mismo problema al compilar un archivo war con maven porque no limpié antes de empaquetar y maven incluía varias versiones de archivos spring jar de compilaciones anteriores.

1641975790 274 Mas de un fragmento con el nombre spring web fue encontrado
andres steffey

Esto ocurrió después de actualizar la versión de Spring Framework en un proyecto de Maven. Finalmente pude resolver el problema ejecutando mvn clean, al parecer, los viejos Spring JAR estaban siendo recogidos en algún lugar debajo del objetivo.

1641975790 21 Mas de un fragmento con el nombre spring web fue encontrado
Raghu Reddy

Mi proyecto es una versión basada en Springboot (1.5.21.RELEASE) y genera guerra y se implementa en tomcat físico. Obtuve el mismo problema y lo resolví con el siguiente enfoque.

Solución: Excluya la dependencia de tomcat-embed-websocket de spring-boot-starter-web en pom.xml

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring.boot.version}</version>
            <exclusions>
                **<exclusion>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-websocket</artifactId>
                </exclusion>**
            </exclusions>
        </dependency>

.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad