linux下的换行符号引起Resin3的struts-config.xml解析报错

由于linux和windows的换行符不一致,有时在这种系统间的文件交换就会出现问题。我就碰到这样的问题。

本来应该是这样的Struts-config.xml内容:


        <action

            attribute="loginForm"

            input="/login.jsp"

            name="loginForm"

            path="/loginAction"

            type="com.learndiary.website.action.account.LoginAction">

            <forward name="success" path="/loginSuccess.jsp" />

            <forward name="failure" path="/login.jsp" />

        </action>

可能是从windows转到linux下变成了这样:


        <action^M^M

            attribute="loginForm"^M^M

            input="/login.jsp"^M^M

            name="loginForm"^M^M

            path="/loginAction"^M^M

            type="com.learndiary.website.action.account.LoginAction">^M^M

            <forward name="success" path="/loginSuccess.jsp" />^M^M

            <forward name="failure" path="/login.jsp" />^M^M

        </action>

这在本地的Tomcat5和空间原来的Resin2下都没有问题,但是当空间改为Resin3后,每次重新启动应用就报错:


The content of element type "action" must match "(icon?,display-name?,description?,set-property*,exception*,forward*)".

...

但是奇怪的是,应用启动后的工作看起来还是正常的。

下面附的是相关的文字:(转自:http://www.real-blog.com/linux-bsd-notes/67

Unix 及 Windows 文字檔轉換

大家如果試過在 Linux 及 Windows 文字檔分享的話,會發現文字檔的 “換行” 不一樣。在 Windows 用記事本開啟 Unix 文字檔時,文件不會開新行,需要使用支援 Unix 格式的文字編輯器才可看到分行;而在 Linux 開啟 Windows 的文字檔時,在每一行最後會有字元 Ctrl-m (^M)。以下是使用 Perl 在 Linux 下將文字檔轉換的方法:

Windows 格式 -> Unix 格式

perl -p -e ’s/\r$//’ < winfile.txt > unixfile.txt

Unix 格式 -> Windows 格式

perl -p -e ’s/\n/\r\n/’ < unixfile.txt > winfile.txt

February 13, 2006 · Linux / BSD 筆記, Windows 筆記 ·

1 Comment »

   1.

      UNIX WINDOWS MAC三者的回车都不一样,好像是:windows是0×0d 0×0a

      UNIX是0×0d MAC是0×0a吧。记不太清楚了。大体上是这样的。

      Comment by 数据恢复 — April 6, 2006 @

One thought on “linux下的换行符号引起Resin3的struts-config.xml解析报错”

  1. 2006-12-29 15:07:55,531 - Parse Error at line 494 column 17: The content of element type "action" must match "(icon?,display-name?,description?,set-property*,exception*,forward*)".

    org.xml.sax.SAXParseException: The content of element type "action" must match "(icon?,display-name?,description?,set-property*,exception*,forward*)".

    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)

    at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)

    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)

    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)

    at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)

    at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source)

    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)

    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)

    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)

    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)

    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)

    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)

    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)

    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)

    at org.apache.commons.digester.Digester.parse(Digester.java:1572)

    at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:738)

    at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:687)

    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:333)

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

    at com.caucho.server.http.Application.createServlet(Application.java:3114)

    at com.caucho.server.http.Application.loadServlet(Application.java:3065)

    at com.caucho.server.http.Application.initServlets(Application.java:1923)

    at com.caucho.server.http.Application.init(Application.java:1849)

    at com.caucho.server.http.VirtualHost.init(VirtualHost.java:728)

    at com.caucho.server.http.ServletServer.initHosts(ServletServer.java:887)

    at com.caucho.server.http.ServletServer.initInternal(ServletServer.java:729)

    at com.caucho.server.http.ServletServer.init(ServletServer.java:538)

    at com.caucho.server.http.ResinServer.init(ResinServer.java:406)

    at com.caucho.server.http.ResinServer.main(ResinServer.java:1167)

    at com.caucho.server.http.HttpServer.main(HttpServer.java:103)

Comments are closed.