2016-03-04 38 views
0

我發現了幾個類似主題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'.的問題。「無法找到XML模式命名空間的Spring NamespaceHandler」僅在可執行文件jar中發生

我試圖應用我已閱讀的建議,但我不斷收到相同的錯誤。

此外,我還沒有發現一個特定的情況:下面的應用程序在Eclipse中完美工作。該錯誤只發生在可執行jar中。我的意思是,我點擊App.java並正確運行它。儘管如此,如果我導出爲Runnable Jar File並使用java -jar啓動它,我會看到下面顯示的錯誤。

靜態的主要方法:

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中(注意,彈簧豆-4.2.xsd和彈簧上下文4.2.xsd在POM具有確切版本 - 一些論壇建議成爲可能的錯誤):

<?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(我加的Hibernate驗證,因爲我看到一些論壇上建議,但因爲我沒有使用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> 
是沒有意義的,我

整個錯誤:

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 

...
(來源不明)

 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"] 

****增加了在2016年/ 3月/ 07

Unable to compile class for JSP

在POM ****增加了新的插件作爲建議

<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> 

回答

0

問題最有可能是在包裝過程中,多次對Spring的依賴有互相覆蓋不同的META-INF/spring.schemas文件。因此,最終的jar有一個亂七八糟的spring.schemas文件。

要解決此問題,您可以添加以下配置,以便.schema文件的內容格式正確。

<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> 
+0

我跟着你的腳本,現在我得到一個新的錯誤「無法編譯JSP的類」。我一直在努力爭取在過去的8天內獲得一個嵌入Tomcat的可執行jar。這個過程當然是在包裝過程中,但我無法弄清楚我做錯了什麼。如果我在eclipse中執行它,我可以使應用程序正常運行,但是我需要使用Tomcat訪問可執行jar或者從嵌入式方法放棄,然後返回部署到服務器,並且我相信我所有的嘗試都可以工作,如果我作爲EAR導出到Websphere或WAR到Tomcat服務器並忘記嵌入的想法 –

相關問題