【发布时间】:2015-11-26 04:29:06
【问题描述】:
我正在使用 Tomcat 7.0.52 和一个使用 Jasper 预编译 JSP 的项目。为此,我使用 Ant 在我的输入 JSP 上运行 org.apache.jasper.JspC。
Jasper 的部分工作是它需要处理我的web.xml。问题是我的web.xml 设置为包含一堆使用XML 实体的共享样板。所以它看起来有点像这样:
<?xml version="1.0" standalone="no" encoding="utf-8"?>
<!DOCTYPE WebAppCommon [
<!ENTITY CommonContextParams SYSTEM "common-context-params.entity">
]>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="3.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
...
&CommonContextParams;
...
</web-app>
这让贾斯珀爆炸了。我得到的错误信息是:
原因:java.io.FileNotFoundException:无法解析具有公共 ID [null]、系统 ID [common-context-params.entity] 和基本 URI [/path/to/project/webapps] 的 XML 资源 [null] /ROOT/WEB-INF/web.xml] 到一个已知的本地实体。
我已经详细查看了 JspC 类,但无济于事。我也没有任何运气搜索过互联网。大多数遇到这个问题的人似乎都遇到了这个问题,因为 Tomcat 的上下文中有一个名为 allowExternalEntities=false 的限制。但我仍处于构建阶段,所以这不是我的问题!
谁能告诉我我可以更改哪些配置项以使 Jasper 接受我的外部实体?
这是一个经过大量编辑的堆栈跟踪:
/path/to/project/build.xml:88: org.apache.jasper.JasperException: XML parsing error on file file:/path/to/project/webapps/ROOT/WEB-INF/web.xml
at org.apache.jasper.compiler.JspConfig.processWebDotXml(JspConfig.java:230)
at org.apache.jasper.compiler.JspConfig.init(JspConfig.java:243)
at org.apache.jasper.compiler.JspConfig.isJspPage(JspConfig.java:465)
at org.apache.jasper.JspC.scanFiles(JspC.java:1285)
at org.apache.jasper.JspC.execute(JspC.java:1340)
... ...
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
... ...
Caused by: org.apache.jasper.JasperException: XML parsing error on file file:/path/to/project/webapps/ROOT/WEB-INF/web.xml
at org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:152)
at org.apache.jasper.compiler.JspConfig.processWebDotXml(JspConfig.java:95)
... 20 more
Caused by: java.io.FileNotFoundException: Could not resolve XML resource [null] with public ID [null], system ID [common-context-params.entity] and base URI [file:/path/to/project/webapps/ROOT/WEB-INF/web.xml] to a known, local entity.
at org.apache.tomcat.util.descriptor.LocalResolver.resolveEntity(LocalResolver.java:154)
at com.sun.org.apache.xerces.internal.util.EntityResolver2Wrapper.resolveEntity(EntityResolver2Wrapper.java:177)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.resolveEntityAsPerStax(XMLEntityManager.java:994)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1209)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEntityReference(XMLDocumentFragmentScannerImpl.java:1908)
... ...
【问题讨论】:
-
common-context-params.entity保存在哪里? -
@wero,与 web.xml 相同的目录。
标签: java xml jsp xml-parsing tomcat7