No se puede ubicar Spring NamespaceHandler for XML schema namespace

Situación

Estoy usando Spring Batch para construir una Instantánea Acumulativa para nuestro Data Warehouse y estoy teniendo un locking de configuración que no puedo descifrar.

He creado un proyecto simple de lotes de spring con STS (SpringSource Tool Suite 2.8.1) usando Spring Template Project . Estos fueron mis dos archivos de configuración xml creados:

launch-context.xml

         

y module-context.xml

    Example job to get you started. It provides a skeleton for a typical batch application.         

Problema

Ejecuto el siguiente comando para comstackr y empaquetar el proyecto: mvn clean compile install

luego hago lo siguiente:

  1. CD a la carpeta de destino

  2. Ejecute el trabajo a través de CommandLineJobRunner: java -jar batchprimer-1.0.jar META-INF / spring / module-context.xml job1

y me sale el siguiente error:

 C:\stsworkspace\BatchPrimer\target>java -jar batchprimer-1.0.jar META-INF/spring /module-context.xml job1 2011-12-15 12:03:53,421 INFO [org.springframework.context.support.ClassPathXmlAp plicationContext] -  2011-12-15 12:03:53,468 INFO [org.springframework.beans.factory.xml.XmlBeanDefin itionReader] -  2011-12-15 12:03:53,796 ERROR [org.springframework.batch.core.launch.support.Com mandLineJobRunner] -  org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Config uration problem: Unable to locate Spring NamespaceHandler for XML schema namespa ce [http://www.springframework.org/schema/batch] Offending resource: class path resource [META-INF/spring/module-context.xml] at org.springframework.beans.factory.parsing.FailFastProblemReporter.err or(FailFastProblemReporter.java:68) at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderC ontext.java:85) at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderC ontext.java:80) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.er ror(BeanDefinitionParserDelegate.java:284) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.pa rseCustomElement(BeanDefinitionParserDelegate.java:1335) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.pa rseCustomElement(BeanDefinitionParserDelegate.java:1328) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentRe ader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentRe ader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registe rBeanDefinitions(XmlBeanDefinitionReader.java:493) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadB eanDefinitions(XmlBeanDefinitionReader.java:390) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea nDefinitions(XmlBeanDefinitionReader.java:334) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea nDefinitions(XmlBeanDefinitionReader.java:302) at org.springframework.beans.factory.support.AbstractBeanDefinitionReade r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143) at org.springframework.beans.factory.support.AbstractBeanDefinitionReade r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178) at org.springframework.beans.factory.support.AbstractBeanDefinitionReade r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149) at org.springframework.beans.factory.support.AbstractBeanDefinitionReade r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212) at org.springframework.context.support.AbstractXmlApplicationContext.loa dBeanDefinitions(AbstractXmlApplicationContext.java:126) at org.springframework.context.support.AbstractXmlApplicationContext.loa dBeanDefinitions(AbstractXmlApplicationContext.java:92) at org.springframework.context.support.AbstractRefreshableApplicationCon text.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) at org.springframework.context.support.AbstractApplicationContext.obtain FreshBeanFactory(AbstractApplicationContext.java:467) at org.springframework.context.support.AbstractApplicationContext.refres h(AbstractApplicationContext.java:397) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83) at org.springframework.batch.core.launch.support.CommandLineJobRunner.st art(CommandLineJobRunner.java:282) at org.springframework.batch.core.launch.support.CommandLineJobRunner.ma in(CommandLineJobRunner.java:574) 

Cosas adicionales

En la carpeta de destino que se llenó con el comando mvn install, tengo lo siguiente:

  1. Una carpeta de clases
  2. una carpeta lib con todas mis dependencias maven
  3. una carpeta maven-archiver
  4. una carpeta de clases de prueba
  5. un batchprimer-1.0.jar

Dentro del contenedor, en META-INF / MANIFEST.MF . Tengo lo siguiente:

 Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven Built-By: dpardo Build-Jdk: 1.6.0_20 Main-Class: org.springframework.batch.core.launch.support.CommandLineJ obRunner Class-Path: lib/spring-jdbc-3.0.6.RELEASE.jar lib/spring-beans-3.0.6.R ELEASE.jar lib/spring-core-3.0.6.RELEASE.jar lib/spring-asm-3.0.6.REL EASE.jar lib/commons-logging-1.1.1.jar lib/spring-tx-3.0.6.RELEASE.ja r lib/aopalliance-1.0.jar lib/spring-aop-3.0.6.RELEASE.jar lib/spring -context-3.0.6.RELEASE.jar lib/spring-expression-3.0.6.RELEASE.jar li b/cglib-nodep-2.2.jar lib/spring-batch-core-2.1.7.RELEASE.jar lib/spr ing-batch-infrastructure-2.1.7.RELEASE.jar lib/xstream-1.3.jar lib/xp p3_min-1.1.4c.jar lib/jettison-1.1.jar lib/commons-io-1.4.jar lib/com mons-dbcp-1.2.2.jar lib/commons-pool-1.3.jar lib/hsqldb-1.8.0.7.jar l ib/aspectjrt-1.6.8.jar lib/aspectjweaver-1.6.8.jar lib/log4j-1.2.14.j ar lib/slf4j-log4j12-1.5.8.jar lib/slf4j-api-1.5.8.jar lib/mysql-conn ector-java-5.1.3.jar 

Así que no creo que sea un problema de classpath porque en la consola parece que está buscando las jarras.

Lo que he intentado

Basado en el error, pegué la siguiente URL

http://www.springframework.org/schema/batch/

y la dirección de los espacios de nombres para Spring Batch parece ser correcta. No he encontrado nada útil ni por ahí. Leí en algún lugar que “algo” podría estar anulando los espacios de nombres de los archivos, pero realmente no entendía por qué, qué, y / o cómo resolverlo.

Esto está listo y ya no funciona sin haber hecho ninguna modificación, complemento o nada. ¿Algunas ideas?

Gracias

SOLUCIÓN

Además de la solución marcada como correcta a continuación. También tuve que cambiar el launch-context.xml del escaneo de componentes al cableado regular de resortes como este a continuación:

 <!-- Commented this     -->                 

Ejecute el trabajo a través de CommandLineJobRunner: java -jar batchprimer-1.0.jar META-INF / spring / module-context.xml job1

incluso con una carpeta de destino completa, debe proporcionar la información de ruta de clase para el comando java , para facilitar la configuración puede probarlo con un archivo ejecutable todo en uno, por ejemplo, con maven-shade-plugin o un script de shell ejecutable (.bat /.sh) con todas las bibliotecas necesarias, por ejemplo, con appassembler-maven-plugin

configuración de ejemplo maven-shade-plugin (crea jar adicional):

   maven-shade-plugin 1.5   package  shade     org.springframework.batch.core.launch.support.CommandLineJobRunner   META-INF/spring.handlers   META-INF/spring.schemas   true  executable     

ejemplo de configuración appassembler (crea estructura de subcarpetas y .bat / .sh):

  appassembler-maven-plugin org.codehaus.mojo 1.1.1  flat false ${project.build.directory}/appassembler  512M 1024M  -Dlog4j.configuration=../etc/log4j/log4j.properties   etc   applicationName org.springframework.batch.core.launch.support.CommandLineJobRunner  spring/job-runner.xml helloWorldJob input.file.pattern=file:.../**/*.txt   booter-unix booter-windows       package  generate-daemons create-repository     

Estaba usando la versión de lotes de spring 3.XX y otras versiones de dependencias de spring 4.XX, y recibí el error anterior. Después de algunas pruebas y errores, encontré que mantener todas las versiones de spring similares solucionó mi problema. Por lo tanto, sugiérele que utilice la versión del lote de muelles 3.XX o la versión de dependencia de spring para spring-jdbc y spring-tx a 2.XX

Saludos, Rave

Necesita spring-batch.jar en su classpath de tiempo de ejecución. Proporciona un controlador de espacio de nombres que es capaz de manejar ese espacio de nombres específico.

El error se debe a que no se ve el archivo META-INF / spring.handlers en spring-batch-core-2.1.7.RELEASE.jar. Este archivo contiene

 http\://www.springframework.org/schema/batch=org.springframework.batch.core.configuration.xml.CoreNamespaceHandler 

Parece que ya sea un problema de classpath o como el archivo spring.handlers en los otros JAR (spring-context, por ejemplo) de alguna manera tiene prioridad.

En mi caso, simplemente faltaba la dependencia de la transacción springl, o tal vez apuntaba a una antigua. Reemplazar eso con 3.1 eliminó el error.