Jasper 编译器可以 XML 外部实体 web.xml 吗?
Can Jasper compiler XML external entities in web.xml?
我正在使用 Tomcat 7.0.52 和一个使用 Jasper 预编译 JSP 的项目。为此,我在输入的 JSP 上使用 Ant 运行 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>
这让 Jasper 爆炸了。我收到的错误消息是:
Caused by: java.io.FileNotFoundException: Could not resolve XML resource [null] with public ID [null], system ID [common-context-params.entity] and base URI [/path/to/project/webapps/ROOT/WEB-INF/web.xml] to a known, local entity.
我详细查看了 JspC
class 无济于事。我也没有任何运气地搜索了互联网。大多数遇到此问题的人似乎都是因为 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)
... ...
您可以尝试使用(未记录的)命令行参数运行 JspC
-no-blockExternal
在上下文中应该与 allowExternalEntities=true
具有相同的效果。
Jasper Ant task可以使用参数blockexternal
设置这个标志:
<jasper blockexternal="false" ... />
我正在使用 Tomcat 7.0.52 和一个使用 Jasper 预编译 JSP 的项目。为此,我在输入的 JSP 上使用 Ant 运行 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>
这让 Jasper 爆炸了。我收到的错误消息是:
Caused by: java.io.FileNotFoundException: Could not resolve XML resource [null] with public ID [null], system ID [common-context-params.entity] and base URI [/path/to/project/webapps/ROOT/WEB-INF/web.xml] to a known, local entity.
我详细查看了 JspC
class 无济于事。我也没有任何运气地搜索了互联网。大多数遇到此问题的人似乎都是因为 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)
... ...
您可以尝试使用(未记录的)命令行参数运行 JspC
-no-blockExternal
在上下文中应该与 allowExternalEntities=true
具有相同的效果。
Jasper Ant task可以使用参数blockexternal
设置这个标志:
<jasper blockexternal="false" ... />