JasperException - 即使存在标记也找不到文件

JasperException - File Not Found even when tag is present

好的 Whosebug,我会在需要的时候来找你。

我继承了一个带有自定义标签库的项目。该项目在 AEM 中,但问题更多是直接 Java 方面的问题,并不是我所知道的 AEM 特有的问题。 AEM 基于 OSGI 构建,因此 可能 相关,但同样不太可能成为答案的一部分。

基本上,我只在两台服务器中的一台上遇到异常。它说:

org.apache.sling.api.scripting.ScriptEvaluationException: org.apache.sling.scripting.jsp.jasper.JasperException: File "/META-INF/tags/helloWorld.tagx" not found

现在 - 这个 helloWorld.tagx 是模板项目遗留下来的垃圾,但出于某种原因它是必不可少的。这里有一些问题。

  1. 标签 在正确的位置 (META-INF/tags/helloWorld.tagx) 我正在使用 jsptld-maven-plugin 生成 tld 文件对我来说看起来是正确的。

插件配置(以及maven-bundle-plugin):

        <plugin>
            <groupId>com.squeakysand.jsp</groupId>
            <artifactId>jsptld-maven-plugin</artifactId>
            <configuration>
                <shortName>myproject</shortName>
                <processTagFiles>true</processTagFiles>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-Activator>com.rebny.taglib.osgi.Activator</Bundle-Activator>
                    <Include-Resource>
                        META-INF/${project.artifactId}-${project.version}.tld=${project.build.outputDirectory}/META-INF/${project.artifactId}-${project.version}.tld,
                        {maven-resources}
                    </Include-Resource>
                    <Sling-Bundle-Resources>
                        /META-INF/tags
                    </Sling-Bundle-Resources>
                </instructions>
            </configuration>
        </plugin> 

以及生成的 tld 文件中的段:

<tag-file>
    <name>helloWorld</name>
    <path>/META-INF/tags/helloWorld.tagx</path>
</tag-file>

所以它对我来说看起来不错,我做了很多搜索并找到了语法错误等的人,但我不相信这里是这种情况,特别是因为它在一台服务器上工作.

  1. 奇怪的是标签实际上并没有在任何地方使用,但是删除它并不能解决问题。 jsp 抛出这个错误使用了其他标签,但不是这个。在整个项目中实际上没有引用这个标签——我认为它可能隐藏了另一个问题。该错误表明它位于 JSP 的第 6 行,但源代码 JSP 或编译后的 JSP 在第 6 行或文件中根本没有任何有趣的内容。同样,即使编译的 JSPs 也没有引用这个标签!

我很乐意提供其他信息。我对此知之甚少,所以我不确定哪些信息是相关的。非常感谢任何帮助或疑难解答提示!

完整堆栈跟踪here

此问题与未找到脚本标记文件有关。 Reference

这是一个 bug,如果 bundle 中的 taglib 引用作为脚本实现的标签 (located in /META-INF/tags) 找不到该脚本 在包含 tld 的捆绑包中搜索。它更像是用作类路径上的资源。

该错误已在 JSP 2.3.2 版本中修复。因此,请在您的项目中使用此 JSP 版本。此外,此错误将在 AEM 6.3.1.1 或更高版本

中修复

这里是与此问题相关的有用 thread

你最好的选择是通过 Adobe Daycare。他们非常擅长为您打补丁。特别是如果您的客户与他们有现有关系,如果他们使用 AEM,他们应该这样做。