Buscar este blog

martes, 9 de diciembre de 2014

java.lang.NoSuchMethodException: org.objectweb.asm.MethodWriter.visitLabel(org.objectweb.asm.Label)

Seguramente estás usando JBOSS.

El problema es que se están pisando las clases de asm de JBOSS con las incluídas en el lib de la aplicación.

Solución

1) Eliminar que no haya ninguna dependencia de asm en el war. Se puede ver con el Dependency Hierarchy del pom o directamente en el war generado.
Por lo general estas librerías las mete Apache CXF, así que una solución es hacer la siguiente exclusión:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<dependency>
 <groupId>org.apache.cxf</groupId>
 <artifactId>cxf-rt-frontend-jaxws</artifactId>
 <exclusions>
  <exclusion>
   <artifactId>asm</artifactId>
   <groupId>asm</groupId>
  </exclusion>
 </exclusions>
</dependency>

2)Usar el asm de JBOSS.
Hay que incluir la dependencia del módulo asm.asm desde el jboss-deployment-structure (va en el META-INF):


1
2
3
4
5
6
7
<jboss-deployment-structure>
 <deployment>
  <dependencies>
   <module name="asm.asm" />  
  </dependencies>
 </deployment>
</jboss-deployment-structure> 


9 comentarios:

  1. Aunque haciendo lo que dices me sigue saliendo el mismo error:
    Caused by: java.lang.NoSuchMethodException: org.objectweb.asm.MethodWriter.visitLabel(org.objectweb.asm.Label)
    at java.lang.Class.getMethod(Class.java:1670) [rt.jar:1.7.0_79]
    at org.apache.cxf.common.util.ReflectionInvokationHandler.invoke(ReflectionInvokationHandler.java:85)
    ... 28 more

    10:53:22,026 INFO [org.jboss.as.server] (ServerService Thread Pool -- 27) JBAS018559: Implementado "transporta.ear" (runtime-name : "transporta.ear")
    10:53:22,029 INFO [org.jboss.as.controller] (Controller Boot Thread) JBAS014774: Reporte del estatus del servicio
    JBAS014775: Nuevas dependencias que faltan/no satisfechas:
    service jboss.deployment.subunit."transporta.ear"."CORREOS.war".deploymentCompleteService (faltan) dependientes: [service jboss.deployment.unit."transporta.ear".deploymentCompleteService]
    JBAS014777: Servicios que no lograron iniciar: service jboss.deployment.subunit."transporta.ear"."CORREOS.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.subunit."transporta.ear"."CORREOS.war".INSTALL: JBAS018733: Error al procesar la fase INSTALL de subdeployment "CORREOS.war" of deployment "transporta.ear"

    ResponderEliminar
  2. Buenas

    Además de esa exclusión, también suelo excluir el subsistema de web services de JBoss para delegar todo el proceso en CXF.

    <exclude-subsystems>
    <subsystem name="webservices" />
    </exclude-subsystems>


    También, la versión con la que lo probé es CXF 2.7.X


    Por último, es posible que la librería asm la esté incluyendo otra dependencia. Yo también me he topado con ella en cglib. Lo mejor es revisar el dependency Hierachy de Maven o directamente el lib del WAR resultante para ver si te la está importando desde otro sitio.

    Un saludo

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. estoy haciendo estas pruebas:

    1) En el pom.xml he excluido el asm:

    <dependency>
    <groupId//>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>3.1.8</version>
    <exclusions>
    <exclusion>
    <artifactId>asm</artifactId>
    <groupId>asm</groupId>
    </exclusion>
    </exclusions>
    </dependency>

    <dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>3.1.8</version>
    </dependency>

    2) He excluido tb el modulo asm del jboss y el subsistema de webservices:

    <jboss-deployment-structure>
    <deployment>
    <exclude-subsystems>
    <subsystem name="webservices" />
    </exclude-subsystems>
    <exclusions>
    <module name="asm.asm" />
    </exclusions>
    </deployment>
    </jboss-deployment-structure>

    Pero sigue saliendome el mismo error...La libreria existe en el war dentro de lib "asm-5.0.4.jar". Segun mi configuracion, esta libreria no se deberia de haber descargado... o no dar este conflicto porq no la estoy descargando ni estoy cogiendo la del servidor... no se q más hacer...

    ResponderEliminar
  5. Buenas

    Por lo que entiendo, el problema se reduce a saber quién está incluyendo la librería "asm-5.0.4.jar" dentro del WAR.

    Una prueba sencilla sería generar el war, quitar manualmente esa librería, e intentar desplegarlo. Así debería funcionar perfectamente.


    Sobre quién está incluyendo esa librería, con maven puedes hacer un mvn dependency:tree y obtendrás un listado de todas las dependencias del proyecto (incluyendo las transitivas) y quién las importa. Seguramente se te esté escapando alguna.

    También puede ser que eclipse/Maven se hayan quedado "tontos". Lo mejor es hacer un maven clean para limpiar todo y volver a empezar el empaquetado desde cero.

    Por último, también podrías optar a incluir esa librería dentro del pom.xml, pero poniéndola como provided. De este modo "engañas" a Maven y te aseguras de que nunca te la empaquete.
    <dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm</artifactId>
    <version>5.0.4</version>
    <scope>provided</scope>
    </dependency>


    Un saludo

    ResponderEliminar
  6. hola de nuevo Sisifo

    Probando con el mvn dependency:tree veo que la dependencia es la siguiente:

    [INFO] +- org.apache.cxf:cxf-rt-frontend-jaxws:jar:3.1.8:compile
    [INFO] | +- xml-resolver:xml-resolver:jar:1.2:compile
    [INFO] | +- org.ow2.asm:asm:jar:5.0.4:compile

    Se supone que excluyendola como puse anteriormente no deberia descargarla, pero no esta funcionando.

    Asi que engañando a maven como dices, funciona!. Por lo menos ya no me da ese error. Muchisimas gracias Sisifo!

    ResponderEliminar
  7. Vale, el problema estaba en la forma de excluirla.

    Fíjate que el groupId de esa dependencia es "org.ow2.asm", mientras que en tu exclusión (lo que tenía yo puesto en el post) el groupId era "asm". Por eso no te la estaba excluyendo. La nueva versión de CXF importa también otra versión de asm.


    <dependency>
        <groupId//>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.1.8</version>
        <exclusions>
            <exclusion>
                <artifactId>asm</artifactId>
                <groupId>org.ow2.asm</groupId>
            </exclusion>
        </exclusions>
    </dependency>

    ResponderEliminar
  8. :) ahora sí, tenias razon! muchas gracias!

    ResponderEliminar