2012-09-24 106 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

我有這個問題,並且發現我有一個沒有在任何用戶。當我刪除角色時,一切正常。

相關問題