1

I found several question with similar topic Context initialization failed org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 2 in XML document from ServletContext resource [/WEB-INF/App-servlet.xml] is invalid; nested exception is org.xml.sax.SAXParseException; systemId: http://www.springframework.org/schema/beans/spring-beans-4.2.xsd; lineNumber: 2; columnNumber: 18; s4s-elt-character: Non-whitespace characters are not allowed in schema elements other than 'xs:appinfo' and 'xs:documentation'..

I tried to applied the suggestions I have read but I keep getting same error.

Moreover, there is a specific thing to my case which I have not found around: the application below works perfectly in Eclipse. The error only happens in executable jar. I mean, I righ click on App.java and run it approperly. Nevertheless, if I export as Runnable Jar File and start it with java -jar I get the error showed below.

Static main method:

import org.apache.catalina.startup.Tomcat;
import javax.servlet.ServletException;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.Wrapper;


public class App6 {

       public static void main(String[] args) throws ServletException, LifecycleException {

              Tomcat tomcat = new Tomcat();
              tomcat.setPort(8080);
              tomcat.setBaseDir(".");

              Context appContext = tomcat.addWebapp(tomcat.getHost(), "","C:\\STS\\wsRestTemplate\\AuthFileUpload\\target\\classes");

              Wrapper jspServlet = appContext.createWrapper();
              jspServlet.setName("jsp");            jspServlet.setServletClass("org.apache.jasper.servlet.JspServlet");

              jspServlet.addInitParameter("fork", "false");
              jspServlet.addInitParameter("xpoweredBy", "false");
              jspServlet.setLoadOnStartup(2);
              appContext.addChild(jspServlet);
              appContext.addServletMapping("*.jsp", "jsp");                

              tomcat.start();
              tomcat.getServer().await();
       }
}

App-servlet.xml (note that spring-beans-4.2.xsd and spring-context-4.2.xsd has the exact version in POM - some forum suggested it as possible error):

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

<beans xmlns="http://www.springframework.org/schema/beans"

   xmlns:context="http://www.springframework.org/schema/context"

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="

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

   http://www.springframework.org/schema/beans/spring-beans-4.2.xsd

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

   http://www.springframework.org/schema/context/spring-context-4.2.xsd">



   <context:component-scan base-package="com.mycompany.myapp.batchs.AuthFileUpload" />



   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

      <property name="prefix" value="/WEB-INF/" />

      <property name="suffix" value=".jsp" />

   </bean>



   <bean id="multipartResolver"

              class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

</beans>

POM (I added hibernate-validator since I saw some forum suggesting but it makes no sense for me since I am not using hibernate)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

       <modelVersion>4.0.0</modelVersion>



       <groupId>com.mycompany.myapp.batchs</groupId>

       <artifactId>AuthFileUpload</artifactId>

       <version>0.0.1-SNAPSHOT</version>

       <packaging>jar</packaging>



       <name>AuthFileUpload</name>

       <url>http://maven.apache.org</url>



       <properties>

              <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

              <tomcat.version>8.0.32</tomcat.version>

              <java.version>1.8</java.version>

              <maven.compiler.plugin.version>2.1</maven.compiler.plugin.version>

              <spring.version>4.2.5.RELEASE</spring.version>

       </properties>



       <dependencies>



              <dependency>

                     <groupId>org.springframework</groupId>

                     <artifactId>spring-web</artifactId>

                     <version>${spring.version}</version>

              </dependency>



              <dependency>

                     <groupId>org.hibernate</groupId>

                     <artifactId>hibernate-validator-annotation-processor</artifactId>

                     <version>5.2.4.Final</version>

              </dependency>





              <dependency>

                     <groupId>org.springframework</groupId>

                     <artifactId>spring-webmvc</artifactId>

                     <version>${spring.version}</version>

              </dependency>

              <dependency>

                     <groupId>org.apache.tomcat.embed</groupId>

                     <artifactId>tomcat-embed-core</artifactId>

                     <version>${tomcat.version}</version>

              </dependency>

              <dependency>

                     <groupId>org.apache.tomcat.embed</groupId>

                     <artifactId>tomcat-embed-logging-juli</artifactId>

                     <version>${tomcat.version}</version>

              </dependency>

              <dependency>

                     <groupId>org.apache.tomcat.embed</groupId>

                     <artifactId>tomcat-embed-jasper</artifactId>

                     <version>${tomcat.version}</version>

              </dependency>

              <dependency>

                     <groupId>org.apache.tomcat</groupId>

                     <artifactId>tomcat-jasper</artifactId>

                     <version>${tomcat.version}</version>

              </dependency>

              <dependency>

                     <groupId>org.apache.tomcat</groupId>

                     <artifactId>tomcat-jasper-el</artifactId>

                     <version>${tomcat.version}</version>

              </dependency>

              <dependency>

                     <groupId>org.apache.tomcat</groupId>

                     <artifactId>tomcat-jsp-api</artifactId>

                     <version>${tomcat.version}</version>

              </dependency>

              <dependency>

                     <groupId>commons-fileupload</groupId>

                     <artifactId>commons-fileupload</artifactId>

                     <version>1.3.1</version>

              </dependency>

              <dependency>

                     <groupId>javax.servlet</groupId>

                     <artifactId>javax.servlet-api</artifactId>

                     <version>3.0.1</version>

              </dependency>





       </dependencies>

       <build>

              <finalName>embeddedApp</finalName>

              <plugins>

                     <plugin>

                           <groupId>org.apache.maven.plugins</groupId>

                           <artifactId>maven-compiler-plugin</artifactId>

                           <version>${maven.compiler.plugin.version}</version>

                           <configuration>

                                  <source>${java.version}</source>

                                  <target>${java.version}</target>

                           </configuration>

                     </plugin>





                     <plugin>

                           <groupId>org.codehaus.mojo</groupId>

                           <artifactId>appassembler-maven-plugin</artifactId>

                           <version>1.1.1</version>

                           <configuration>

                                  <assembleDirectory>target</assembleDirectory>

                                  <programs>

                                         <program>

                                                <mainClass>com.mycompany.myapp.batchs.AuthFileUpload.App4</mainClass>

                                                <name>App4</name>

                                         </program>

                                  </programs>

                           </configuration>

                           <executions>

                                  <execution>

                                         <phase>package</phase>

                                         <goals>

                                                <goal>assemble</goal>

                                         </goals>

                                  </execution>

                           </executions>

                     </plugin>

              </plugins>

       </build>

</project>

Entire error:

c:\temp>cd C:\Program Files\Java\jre1.8.0_45\bin



C:\Program Files\Java\jre1.8.0_45\bin>java -jar C:\temp\myApp.jar

Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook

Picked up _JAVA_OPTIONS: -Xrunjvmhook -Xbootclasspath/a:C:\PROGRA~2\HP\QUICKT~1\

bin\JAVA_S~1\classes;C:\PROGRA~2\HP\QUICKT~1\bin\JAVA_S~1\classes\jasmine.jar

Mar 04, 2016 3:40:43 PM org.apache.coyote.AbstractProtocol init

INFO: Initializing ProtocolHandler ["http-nio-8080"]

Mar 04, 2016 3:40:43 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSele

ctor

INFO: Using a shared selector for servlet write/read

Mar 04, 2016 3:40:43 PM org.apache.catalina.core.StandardService startInternal

INFO: Starting service Tomcat

...
(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp

l.scanDocument(Unknown Source)

        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U

nknown Source)

        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U

nknown Source)

        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown So

urce)

        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown So

urce)

        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unk

nown Source)

        at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocum

ent(DefaultDocumentLoader.java:76)

        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadD

ocument(XmlBeanDefinitionReader.java:429)

        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadB

eanDefinitions(XmlBeanDefinitionReader.java:391)

        ... 29 more



Mar 04, 2016 3:40:55 PM org.apache.catalina.core.ApplicationContext log

SEVERE: StandardWrapper.Throwable

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 2 in

XML document from ServletContext resource [/WEB-INF/App-servlet.xml] is invalid

; nested exception is org.xml.sax.SAXParseException; systemId: http://www.spring

framework.org/schema/beans/spring-beans-4.2.xsd; lineNumber: 2; columnNumber: 18

; s4s-elt-character: Non-whitespace characters are not allowed in schema element

s other than 'xs:appinfo' and 'xs:documentation'. Saw 'Redirect'.

        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadB

eanDefinitions(XmlBeanDefinitionReader.java:399)

        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea

nDefinitions(XmlBeanDefinitionReader.java:336)

        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea

nDefinitions(XmlBeanDefinitionReader.java:304)

        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade

r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)

        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade

r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)

        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade

r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)

        at org.springframework.web.context.support.XmlWebApplicationContext.load

BeanDefinitions(XmlWebApplicationContext.java:125)

        at org.springframework.web.context.support.XmlWebApplicationContext.load

BeanDefinitions(XmlWebApplicationContext.java:94)

        at org.springframework.context.support.AbstractRefreshableApplicationCon

text.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)

        at org.springframework.context.support.AbstractApplicationContext.obtain

FreshBeanFactory(AbstractApplicationContext.java:609)

        at org.springframework.context.support.AbstractApplicationContext.refres

h(AbstractApplicationContext.java:510)

        at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshW

ebApplicationContext(FrameworkServlet.java:667)

        at org.springframework.web.servlet.FrameworkServlet.createWebApplication

Context(FrameworkServlet.java:633)

        at org.springframework.web.servlet.FrameworkServlet.createWebApplication

Context(FrameworkServlet.java:681)

        at org.springframework.web.servlet.FrameworkServlet.initWebApplicationCo

ntext(FrameworkServlet.java:552)

        at org.springframework.web.servlet.FrameworkServlet.initServletBean(Fram

eworkServlet.java:493)

        at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.

java:136)

        at javax.servlet.GenericServlet.init(GenericServlet.java:158)

        at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.

java:1238)

        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.

java:1151)

        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:10

38)

        at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContex

t.java:4997)

        at org.apache.catalina.core.StandardContext.startInternal(StandardContex

t.java:5289)

        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)

        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.

java:1408)

        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.

java:1398)

        at java.util.concurrent.FutureTask.run(Unknown Source)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

        at java.lang.Thread.run(Unknown Source)

Caused by: org.xml.sax.SAXParseException; systemId: http://www.springframework.o

rg/schema/beans/spring-beans-4.2.xsd; lineNumber: 2; columnNumber: 18; s4s-elt-c

haracter: Non-whitespace characters are not allowed in schema elements other tha

n 'xs:appinfo' and 'xs:documentation'. Saw 'Redirect'.

        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAX

ParseException(Unknown Source)

        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unk

nown Source)

        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(

Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(

Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaDOMParser.chara

cters(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp

l.scanDocument(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.p

arse(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.p

arse(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaDOMParser.parse

(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getS

chemaDocument(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.pars

eSchema(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema

(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.findSch

emaGrammar(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleS

tartElement(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startEl

ement(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scan

StartElement(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSCo

ntentDriver.scanRootElementHook(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp

l$FragmentContentDriver.next(Unknown Source)

        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$Prolog

Driver.next(Unknown Source)

...

Mar 04, 2016 3:40:55 PM org.apache.jasper.EmbeddedServletOptions <init>

SEVERE: The scratchDir you specified: C:\Program Files\Java\jre1.8.0_45\bin\work

\Tomcat\localhost\ROOT is unusable.

Mar 04, 2016 3:40:55 PM org.apache.coyote.AbstractProtocol start

INFO: Starting ProtocolHandler ["http-nio-8080"]

**** Added in 2016/March/07

Unable to compile class for JSP

**** Added new plugin in POM as suggested

<groupId>org.apache.maven.plugins</groupId>
                           <artifactId>maven-shade-plugin</artifactId>
                           <version>1.3.3</version>
                           <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>
Jim C
  • 3,957
  • 25
  • 85
  • 162

1 Answers1

0

The problem most likely is in the packaging process, multiple spring dependencies have different META-INF/spring.schemas files that override each other. Hence, the final jar has a messed up spring.schemas file.

To fix this problem you can add the following configuration so that the contents of the .schema files are in proper format.

<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>
Mudassar
  • 3,135
  • 17
  • 22
  • I followed your sggestion and now I am getting a new error "Unable to compile class for JSP". I have been struggling for the last 8 days to get an executable jar with Tomcat embedded. Certainly the process is with packaging process but I can't figure out what I am doing wrong. I can make the application run correctly if I do it inside of eclipse but I need to reach an executable jar with Tomcat or give up from embedded approach and come back to deploy to a server and, I am sure all my tentatives would work if I export as an EAR to Websphere or WAR to Tomcat server and forget embedded idea – Jim C Mar 07 '16 at 21:28