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

时间:2017-10-25 20:03:34

标签: java maven jsp osgi

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

我继承了一个带有自定义标记库的项目。该项目位于AEM中,但问题更多的是Java方面的问题,而且对于我所知道的AEM来说并不是特定的。 AEM建立在OSGI之上,因此可以相关,但同样不太可能成为答案的一部分。

基本上,我只在两台服务器中的一台上获得例外。它说:

  

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

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

  1. 标记 位于正确的位置(META-INF/tags/helloWorld.tagx),我使用jsptld-maven-plugin生成tld文件,该文件看起来正确我。
  2. 插件的配置(以及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行或文件中都没有任何有趣的内容。同样,即使编译的JSP也没有引用此标记!
    2. 我很乐意提供其他信息。我对此的了解很差,所以我不确定哪些信息是相关的。非常感谢任何帮助或疑难解答提示!

      完整堆栈跟踪here

2 个答案:

答案 0 :(得分:1)

最好的办法是通过Adobe Daycare。他们非常善于为您提供补丁。特别是如果您的客户与他们存在关系,那么他们应该使用AEM。

答案 1 :(得分:0)

该问题与找不到脚本标记文件有关。 Reference

bug 指出,如果捆绑中的taglib引用了作为脚本SetPage实现的标记,则找不到此脚本,因为它不是在包含(located in /META-INF/tags)的包中搜索。它更适合用作类路径上的资源。

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

中修复

此处,与此问题相关的是有用的thread