starter example baeldung advice java spring aop

java - example - Spring 3.0: no se puede ubicar Spring NamespaceHandler para el espacio de nombres de esquema XML



spring-aop maven (11)

Mi configuración es bastante simple: tengo un front-end web, el back-end está conectado por resorte.

Estoy usando AOP para agregar una capa de seguridad en mis servicios de rpc.

Todo está bien, excepto por el hecho de que la aplicación web aborta en el lanzamiento:

[java] SEVERE: Context initialization failed [java] org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/aop] [java] Offending resource: ServletContext resource [/WEB-INF/gwthandler-servlet.xml]

Aquí está el fragmento de mi archivo de configuración xml:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <aop:config> <aop:aspect id="security" ref="securityAspect" > <aop:pointcut id="securedServices" expression="@annotation(com.fb.boog.common.aspects.Secured)"/> <aop:before method="checkSecurity" pointcut-ref="securedServices"/> </aop:aspect> </aop:config>

Leí en los internets que puede ser mi carga de trabajo el núcleo del problema. Dudoso, ya que aquí está mi directorio WEB-INF / lib:

./WEB-INF/lib ./WEB-INF/lib/aopalliance-alpha1.jar ./WEB-INF/lib/aspectj-1.6.6.jar ./WEB-INF/lib/commons-collections.jar ./WEB-INF/lib/commons-logging.jar ./WEB-INF/lib/ehcache-core-1.7.0.jar ./WEB-INF/lib/ejb3-persistence.jar ./WEB-INF/lib/hibernate ./WEB-INF/lib/hibernate/antlr.jar ./WEB-INF/lib/hibernate/asm.jar ./WEB-INF/lib/hibernate/bsh-2.0b1.jar ./WEB-INF/lib/hibernate/cglib.jar ./WEB-INF/lib/hibernate/dom4j.jar ./WEB-INF/lib/hibernate/freemarker.jar ./WEB-INF/lib/hibernate/hibernate-annotations.jar ./WEB-INF/lib/hibernate/hibernate-shards.jar ./WEB-INF/lib/hibernate/hibernate-tools.jar ./WEB-INF/lib/hibernate/hibernate.jar ./WEB-INF/lib/hibernate/jtidy-r8-20060801.jar ./WEB-INF/lib/jabsorb ./WEB-INF/lib/jabsorb/jabsorb-1.3.1.jar ./WEB-INF/lib/jta.jar ./WEB-INF/lib/jyaml-1.3.jar ./WEB-INF/lib/postgresql-8.4-701.jdbc4.jar ./WEB-INF/lib/sjsxp.jar ./WEB-INF/lib/spring ./WEB-INF/lib/spring/org.springframework.aop-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.asm-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.aspects-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.beans-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.context-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.context.support-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.core-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.expression-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.instrument-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.instrument.tomcat-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.jdbc-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.jms-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.orm-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.oxm-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.test-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.transaction-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.web-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.web.portlet-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.web.servlet-3.0.0.RELEASE.jar ./WEB-INF/lib/spring/org.springframework.web.struts-3.0.0.RELEASE.jar ./WEB-INF/lib/testng-5.11-jdk15.jar ./WEB-INF/web.xml


Asegúrate de tener todas las dependencias resueltas

Me encuentro con este problema en mi primer intento de AOP, siguiendo un tutorial de primavera. Mi problema no fue tener spring-aop.jar en mi classpath. El tutorial enumeró todas las demás dependencias que tuve que agregar, a saber:

  • aspectjrt.jar
  • aspectjweaver.jar
  • aspectj.jar
  • aopalliance.jar

Pero el que faltaba. Solo un problema más que puede contribuir a ese síntoma en la pregunta original.

Estoy usando Eclipse (neón), Java SE 8, beans 3.0, Spring AOP 3.0, Spring 4.3.4. El problema se muestra en la vista de Java, no en JEE, y al intentar simplemente ejecutar la aplicación con el menú del botón derecho -> Ejecutar como -> Aplicación Java.


¿Intentó poner todos sus jar directamente en el directorio WEB-INF/lib lugar de subdirectorios de eso?

No hay WEB-INF/lib/spring/org.springframework.aop-3.0.0.RELEASE.jar , solo WEB-INF/lib/org.springframework.aop-3.0.0.RELEASE.jar

Lo mismo con el resto de los frascos.


¿Qué IDE (si hay alguno) estás usando? ¿Esto ocurre cuando trabajas dentro de un IDE, o solo en la implementación? Si se trata de una implementación, puede ser porque cualquiera que sea el mecanismo de implementación que use (maven-assembly haciendo un solo JAR con dependencias es jira.codehaus.org/browse/MASSEMBLY-360 ) está fusionando todos sus JAR en un solo directorio y los archivos de esquema y manejador de Spring están sobreescribiendo cada uno otro.


En caso de que alguien más se encuentre con este problema, lo hice usando Eclipse; ejecutar el proyecto con la acción de clic derecho. Este error se produjo en la vista J2EE, pero NO se produjo en la vista de Java. No estoy seguro - asumiendo algo con la adición de bibliotecas al directorio correcto ''lib''.

También estoy usando un proyecto Maven, que permite a m2eclipse administrar dependencias.


Encontrado este error al usar maven-shade-plugin, la solución incluía:

META-INF / spring.schemas

y

META-INF / spring.handlers

transformadores en maven-shade-plugin al construir ...

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> </transformers> </configuration> </execution> </executions> </plugin>

(Créditos: Idea para evitar que spring.handlers / spring.schemas se sobrescriban al fusionar múltiples dependencias de primavera en un solo contenedor )


Este truco funcionó para mí también: en Eclipse, haga clic derecho en el proyecto y luego en Maven> Actualizar dependencias.


Me encontré con un error similar, pero refiriéndome a Spring Webflow en un proyecto Roo recién creado. La solución para mí resultó ser (Proyecto) / clic derecho / Maven / Habilitar Dependencias Maven (seguido de algunos reinicios y republicaciones a Tomcat).

Parecía que STS o m2Eclipse no aplicaban todas las jarras de flujo web de primavera en el directorio lib de la aplicación web. No estoy seguro por qué. Pero habilitar el manejo de la dependencia de maven y luego reconstruir parecía solucionar el problema; los archivos de flujo web finalmente se publican y, por lo tanto, puede encontrar las referencias del espacio de nombres del esquema.

Investigué esto explorando el directorio de tomcat en el que se publicó la aplicación web, haciendo clic en WEB-INF / lib / mientras se estaba ejecutando y notando que faltaban los archivos jar de webflow.


Si usa mvn , compruebe que tiene el alcance correcto (si lo tiene definido) en su pom.xml . Una vez lo programé incorrectamente para probarlo pero lo necesité para el tiempo de ejecución .


También puedes probar usar el plugin maven one-jar que nos solucionó el problema. Simplemente siga las instrucciones desde here .


Tengo el mismo problema con la primavera 3.0.2 y spring-beans-3.0.xsd.

Mi solución:

Cree un archivo META-INF / spring.schemas en la carpeta fuente y copie todas las definiciones necesarias. Crea spring.handlers también.

Creo que la clase PluggableSchemaResolver no funciona correctamente.

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/xml/PluggableSchemaResolver.html

del javadoc:

"De forma predeterminada, esta clase buscará los archivos de mapeo en el classpath utilizando el patrón: META-INF / spring.schemas permitiendo que existan múltiples archivos en el classpath en cualquier momento".

pero en mi caso, esta clase solo leía el primer spring.schemas finded.

Grettings. pacovr