Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

unable to locate Spring NamespaceHandler error

I have been having this error for nearly a week now and im just about ready to give in. I have used Maven2 to make the BIG jar file. When I run the jar file using:

 java -jar someJar.jar

I get this error:

 ERROR: [27/55/13 10:55] Launcher: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]
 Offending resource: class path resource [JavaProjectApplicationContext.xml]

JavaProjectApplicationContext.xml is as follows:

 <?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:jee="http://www.springframework.org/schema/jee"
   xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/jee
       http://www.springframework.org/schema/jee/spring-jee-3.0.xsd"> 

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location"><value>deployment.properties</value></property>
</bean>

<bean id="LexEditorDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"><value>${hibernate.jdbc_driver}</value></property>
<property name="username"><value>${hibernate.username}</value></property>
<property name="password"><value>${hibernate.password}</value></property>
<property name="url"><value>${hibernate.url}</value></property>
<property name="defaultAutoCommit"><value>${hibernate.default_auto_commit}</value>   </property>
<property name="maxActive"><value>20</value></property>
<property name="maxIdle"><value>3</value></property>
 <property name="testOnBorrow"><value>true</value></property>
<property name="testOnReturn"><value>true</value></property>
<property name="testWhileIdle"><value>true</value></property>
</bean>

 <context:component-scan base-package="com.k_int.bank.plugin">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
 </context:component-scan>

  <bean id="ThesSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
   <property name="dataSource"><ref local="LexEditorDataSource"/></property>
  <property name="configurationClass">  <value>org.hibernate.cfg.AnnotationConfiguration</value></property> 
   <property name="packagesToScan">
        <list>
            <value>com.bank.kernel.datamodel</value>              
        </list>
</property>
<property name="annotatedClasses">
  <list>
    <!-- identity service -->
    <value>com.svc.identity.datamodel.PartyHDO</value>
    <value>com.svc.identity.datamodel.RegisteredUserHDO</value>
    <value>com.svc.identity.datamodel.AuthenticationDetailsHDO</value>
    <value>com.svc.identity.datamodel.GrantHDO</value>
    <value>com.svc.identity.datamodel.PermissionHDO</value>
    <value>com.svc.identity.datamodel.RegisteredOrganisationHDO</value>
    <value>com.svc.identity.datamodel.RoleHDO</value>
   </list>
</property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
    <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
    <prop key="hibernate.show_sql">false</prop>       
  </props>
  </property>
 </bean>
  <bean id="IndexService" class="com.k_int.bank.index.solr_impl.SOLRIndexService" init-method="init">
  <property name="indexDirectory"><value>${com.bank.index_dir}</value></property>
  <property name="indexPropertyFile"><value>solr.properties</value></property>
  </bean>



Things I have tried so far.

built the project in 3 different ways (2 IDE's and command line) removed any jar dependancy clashes (I had spring-2.5.6.jar and spring-context-3.0.5.RELEASE.jar, So i removed spring-2.5.6.jar)

changed http://www.springframework.org/schema/beans/spring-beans-2.5.xsd to http://www.springframework.org/schema/beans/spring-beans-3.0.xsd.

None of these changes have removed the error.

In the car file exists in

 someJar.jar/org/springframework/context/config/ContextNameSpaceHandler.class

Has anyone got any ideas at all.

like image 903
Sagarmichael Avatar asked Feb 27 '13 11:02

Sagarmichael


1 Answers

Very likely what has happened is the files which provides meta data to Spring about the location of the custom namespace handlers(spring.schema, spring.handlers) have ended up overwriting each other when you created the big(uber) jar.

To clarify this a little more, if you are using context name space say - context:property-placeholder-configurer, the information about how to parse this namespace is using a spring.handlers file in spring-context.jar!:/META-INF/spring.handlers file, a similar file is present in other spring jar files for other custom namespaces support. Now, when you create the Uber jar, since the location of the handler file is exactly the same, one spring.handler file will end up overwriting the others, and you see the error that you are seeing. Some potential fixes are described here, where some alternate ways of creating the executable jar is suggested:

How to create spring-based executable jar with maven?

like image 134
Biju Kunjummen Avatar answered Oct 24 '22 19:10

Biju Kunjummen