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.
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?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With