2012-09-24 103 views
1

终止我正在创建简单的Web应用程序。而且我在配置服务器时遇到了问题。当我尝试启动服务器时,我收到了一个错误元素类型“主机”必须由匹配的结束标记“”终止“”
但我的主机标记看起来像下面的方式(是的,它是关闭):元素类型“主机”必须由匹配的结束标记“</Host>”

<?xml version="1.0" encoding="UTF-8"?> 
<Server port="${base.shutdown.port}" shutdown="SHUTDOWN"> 
    <Listener className="org.apache.catalina.core.JasperListener" /> 
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/> 
    <Listener 
     className="com.springsource.tcserver.serviceability.deploy.TcContainerDeployer" /> 
    <Listener accessFile="${catalina.base}/conf/jmxremote.access" 
     authenticate="true" bind="127.0.0.1" 
     className="com.springsource.tcserver.serviceability.rmi.JmxSocketListener" 
     passwordFile="${catalina.base}/conf/jmxremote.password" port="${base.jmx.port}" 
     useSSL="false" /> 
    <GlobalNamingResources> 
     <Resource auth="Container" description="User database that can be updated and saved" 
      factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" 
      pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" /> 
    </GlobalNamingResources> 
    <Service name="Catalina"> 
     <Executor maxThreads="300" minSpareThreads="50" name="tomcatThreadPool" 
     namePrefix="tomcat-http--" /> 
     <Engine defaultHost="localhost" name="Catalina"> 
      <Realm className="org.apache.catalina.realm.LockOutRealm"> 
       <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" /> 
      </Realm> 
      <Host appBase="webapps" autoDeploy="true" deployOnStartup="true" 
      deployXML="true" name="localhost" unpackWARs="true"> 
       <Valve directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." 
       suffix=".txt" className="org.apache.catalina.valves.AccessLogValve"/> 
       <Context docBase="SimpleBlog" path="/simpleblog" reloadable="true" 
       source="org.eclipse.jst.jee.server:SimpleBlog"/> 
      </Host> 
     </Engine> 
     <Connector acceptCount="100" connectionTimeout="20000" 
      executor="tomcatThreadPool" maxKeepAliveRequests="15" port="${bio.http.port}" 
      protocol="org.apache.coyote.http11.Http11Protocol" redirectPort="${bio.https.port}" /> 
    </Service> 
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> 
</Server> 

而且我得到了以下错误:

无法过时的文件服务器清洁:元素类型“主机”必须由匹配的结束标签“”终止。

元素类型“主机”必须由匹配的结束标记终止"</Host>".** 但是,如果我使用管理员权限(win7)运行应用程序,怎么可能?

完整的堆栈跟踪是:

SEVERE: Parse Fatal Error at line 22 column 11: The element type "Host" must be terminated by the matching end-tag "</Host>". 
org.xml.sax.SAXParseException; systemId: file:/C:/Program%20Files/Spring%20Tool%20SUite/vfabric-tc-server-developer-2.7.1.RELEASE/spring-insight-instance/conf/server.xml; lineNumber: 22; columnNumber: 11; The element type "Host" must be terminated by the matching end-tag "</Host>". 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198) 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:441) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368) 
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1375) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1708) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2898) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568) 
    at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1537) 
    at org.apache.catalina.startup.Catalina.load(Catalina.java:601) 
    at org.apache.catalina.startup.Catalina.load(Catalina.java:649) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450) 
+1

看来你在输入XML文件中有一些特殊字符,这就是为什么SAX解析器失败/ – kosa

+0

另外,格式化你的stacktrace作为源代码将不胜感激。 – noahlz

+0

我已经更新了server.xml文件。 – Eugene

回答

0

(我无法评论,但这样我会张贴此作为一个答案)

它说<Valve lassName=(在类名代替)。这是不对的。

+0

对不起,这是一个错字。主题已更新。问题仍然是实际 – Eugene

0

现在className中的c(在Valve中)是16位字符。这会使解析器崩溃。

+0

我在那篇文章中从键盘输入了它。我不知道如何从我的键盘输入Unicode符号。我怀疑,这是我面临的问题。对不起 – Eugene

+0

我复制了上面的文本,保存到一个文件并做了hexdump。该单个字符需要两个字节,并且是唯一的字符。你也许可以复制其他任何属性“className”。 –

2

问题是基本实例server.xml没有得到更新。因此,手动更新基础实例下的server.xml,例如C:\ sw \ STS \ vfabric-tc-server-developer-2.7.2.RELEASE \ base-instance \ conf

+0

就我而言,我不得不删除'workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/conf/server.xml'。 –

0

对于后代来说,@ user1575688的答案相当正确的原因之一是它可能被遗忘的原因之一是如果你的磁盘已满(可能是因为崩溃导致突然的核心转储)。您可以从您的workspace/Servers/<server-config>/conf/复制server.xml(或其他导致错误的xml文件)到$CATALINA_BASE/conf/

0

我有这个问题,并且发现我有一个没有在任何用户。当我删除角色时,一切正常。

相关问题