&引用;找不到XML架构命名空间的Spring NamespaceHandler“0”;仅在可执行jar中发生

&引用;找不到XML架构命名空间的Spring NamespaceHandler“0”;仅在可执行jar中发生,spring,maven,spring-mvc,tomcat,embedded-tomcat-7,Spring,Maven,Spring Mvc,Tomcat,Embedded Tomcat 7,我发现几个主题类似的问题上下文初始化失败 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:来自ServletContext资源[/WEB-INF/App servlet.xml]的xml文档中的第2行无效;嵌套异常为org.xml.sax.saxpasseeption;系统ID:http://www.springframework.org/schema/beans/spring-beans-4.2.xsd

我发现几个主题类似的问题
上下文初始化失败
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:来自ServletContext资源[/WEB-INF/App servlet.xml]的xml文档中的第2行无效;嵌套异常为org.xml.sax.saxpasseeption;系统ID:http://www.springframework.org/schema/beans/spring-beans-4.2.xsd; 行号:2;栏目编号:18;s4s elt字符:“xs:appinfo”和“xs:documentation”之外的架构元素中不允许使用非空白字符。

我试着应用我读过的建议,但我总是得到同样的错误

此外,在我的案例中还有一件我还没有发现的事情:下面的应用程序在Eclipse中可以完美地工作。错误只发生在可执行jar中。我的意思是,我右键点击App.java并适当地运行它。然而,如果我导出为可运行的Jar文件并用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(请注意,spring-beans-4.2.xsd和spring-context-4.2.xsd在POM中的版本与此完全相同-一些论坛认为这可能是一个错误):


(来源不明)

2016年3月4日下午3:40:55 org.apache.jasper.EmbeddedServletOptions
严重:指定的scratchDir:C:\Program Files\Java\jre1.8.0\u 45\bin\work
\Tomcat\localhost\ROOT不可用。
2016年3月4日下午3:40:55 org.apache.coyote.AbstractProtocol开始
信息:正在启动ProtocolHandler[“http-nio-8080”]
****于2016/2007年3月增加

****根据建议在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>
org.apache.maven.plugins
maven阴影插件
1.3.3
包裹
阴凉处
META-INF/spring.handlers
META-INF/spring.schemas

问题最有可能出现在打包过程中,多个spring依赖项具有不同的META-INF/spring.schema文件,这些文件相互覆盖。因此,最后一个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>
META-INF/spring.handlers META-INF/spring.schemas

问题最有可能出现在打包过程中,多个spring依赖项具有不同的META-INF/spring.schema文件,这些文件相互覆盖。因此,最后一个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>
META-INF/spring.handlers META-INF/spring.schemas

我遵循了您的建议,现在出现了一个新错误“无法为JSP编译类”。在过去的8天里,我一直在努力获得一个嵌入Tomcat的可执行jar。当然,这个过程与包装过程有关,但我不知道我做错了什么。如果我在eclipse中运行应用程序,我可以使其正确运行,但我需要使用Tomcat访问一个可执行jar,或者放弃嵌入式方法,返回部署到服务器,我确信,如果我将EAR导出到Websphere或WAR导出到Tomcat服务器,并且忘记了embedded ideaI遵循了您的建议,那么我的所有想法都会起作用,现在我遇到了一个新错误“无法为JSP编译类”。在过去的8天里,我一直在努力获得一个嵌入Tomcat的可执行jar。当然,这个过程与包装过程有关,但我不知道我做错了什么。如果我在eclipse中运行应用程序,我可以使其正确运行,但我需要使用Tomcat访问一个可执行jar,或者放弃嵌入式方法,重新部署到服务器上。我确信,如果我将EAR导出到Websphere或WAR导出到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"]
<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>
<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>