全部, 我正在研究我们在Resin Web应用服务器中部署的java webapp。我一直在为应用程序的一个新部分做一些XML解析,并意识到我们的应用程序正在使用Resin classes来进行解析。我想摆脱这种情况并出于多种原因使用更标准的东西,所以我在树形配置文件中设置了这些系统属性(并将xerces jar添加到我的类路径中):
<system-property javax.xml.parsers.DocumentBuilderFactory="org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"/>
<system-property javax.xml.parsers.SAXParserFactory="org.apache.xerces.jaxp.SAXParserFactoryImpl"/>
而且,现在我在几个页面上得到JSP编译错误(我猜Resin的内置解析器更宽松)。错误如下:
org.xml.sax.SAXParseException: The value of attribute "title" associated with an element type "display:column" must not contain the '<' character.
而且,某些页面上的'display:column'标签确实包含'title'属性中的标记。这是一个例子:
<display:column scope='col' class=" appealColorBG selectAllWidth"
title="<span class='centerThis'><label for='selectAll'>Select All</label><br />
<input type='checkbox' name='selectAll'
id='selectAll'
onClick='selectAllCheckboxes();'/></span> " >
这是一些丑陋的JSP代码,我知道,但它也是已经投入生产的代码,所以我对改变它犹豫不决。
有没有人知道我可以设置xerces的方式,以便它允许JSP按原样编译?
答案 0 :(得分:1)
这当然是丑陋的JSP代码。
如果您正在使用XML解析器,那么您就遇到了问题。有效XML中的属性值不能包含'&lt;'正如施奈斯告诉你的那样。
你可以告诉Xerces接受这个是值得怀疑的,但是修复XML比将XML解析器说成接受错误的XML更好。
您可能希望退回使用Resin类,直到您可以提供Xerces正确的XML,或者将Resin配置为不使用XML解析器作为其JSP编译的一部分 - 请参阅注释。