Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to locate Spring NamespaceHandler for XML schema namespace http://www.springframework.org/schema/data/jpa

I am using spring and hibernate in my java project which is managed by maven. I created an assembly (jar with dependencies) using following command mvn install assembly:assembly

Now, when I am trying to run my main class with the command: java -cp xyz-1.0-SNAPSHOT-jar-with-dependencies.jar com.xyz.class then I am getting following error:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/data/jpa]**
Offending resource: class path resource [xyz-component-scans-config.xml]

    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:271)
.
.

I am not understanding that why it is not able to find the NamespaceHandler? as I already have following dependencies in pom.

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>3.1.0.RELEASE</version
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-jpa</artifactId>
      <version>1.0.2.RELEASE</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency> 
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>3.1.0.RELEASE</version>
      <scope>compile</scope>
    </dependency>

I did try the suggestion in the following thread, but it didn't work for me. Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/data/jpa]

Source code for org.springframework.beans.factory.parsing.BeanDefinitionParsingException

like image 215
Arry Avatar asked Oct 27 '13 07:10

Arry


2 Answers

You may be better off using the maven-shade-plugin to create your jar with dependencies. Here is an example of how to use the plugin:

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>2.1</version>
          <executions>
            <execution>
              <phase>package</phase>
              <goals><goal>shade</goal></goals>
              <configuration>
                <transformers>
                  <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                    <mainClass>com.stackexchange.stackoverflow.ExecutableJar</mainClass>
                  </transformer>
                  <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>

In my experience the maven-shade-plugin is the best way to create an uber jar. See my other SO answer for a more complete example. Note that this example doesn't require any 3rd party jars, but the maven-shade-plugin does handle them nicely. Give it a shot! :-)

like image 115
axiopisty Avatar answered Nov 18 '22 08:11

axiopisty


I used the [one-jar] plugin (https://code.google.com/p/onejar-maven-plugin/) for this.

I was having the same issue; namely maven assembly was messing up my spring.schema files. (Maven's plugin has been known to do this (spring forum link from another person experiencing the same issue)).

If you really want to know what's going on here, expand your .jar file and look at the spring.schema and spring.handlers files. Look at the product of maven's assembly plugin, read this (Need understanding of spring.handlers and spring.schemas) stack overflow post that explains how those files are used.

like image 20
zmf Avatar answered Nov 18 '22 07:11

zmf