Не работает простой проект на Tapestry 4

Пытаюсь собрать простейший проект на Tapestry 4.1 (Нужно именно 4.1-4.1.6) и разместить его сервлет на Tomcat.

│   .gitignore
│   pom.xml
│
├───.idea
│       ...
│
└───src
    └───main
        ├───java
        │   └───ru
        │       └───tapestrytest
        │           ├───data
        │           │       TestProject.java
        │           │
        │           ├───pages
        │           │       Edit.java
        │           │       Info.java
        │           │
        │           └───util
        │                   MyValidationDelegate.java
        │
        ├───resources
        └───webapp
            │   Edit.html
            │   index.jsp
            │   Info.html
            │
            └───WEB-INF
                    app.application
                    web.xml

Используется плагин Smart Tomcat в IntelliJ IDEA Community Edition. Пробовал и просто WAR собрать и разместить на Tomcat автономно. Перепробовал разные версии Tomcat с 9.0.85 и вниз до 6.0.30, везде ошибка одна и та же. Запускаться то запускается, показывает стартовый index.jsp, но при попытке обратиться к сервлету app падает с 500-й ошибкой.

...
org.apache.hivemind.ApplicationRuntimeException: Unable to add method java.lang.String getPreloadedImageReference(org.apache.tapestry.IComponent, java.lang.String) to class $ResponseBuilder_18d419d3852: java.io.IOException: invalid constant type: 15
   location: jar:file:/C:/Users/UserName/.m2/repository/org/apache/tapestry/tapestry-framework/4.1.6/tapestry-framework-4.1.6.jar!/META-INF/tapestry.globals.xml, line 143, column 73

org.apache.hivemind.ApplicationRuntimeException: Unable to add method java.lang.String getPreloadedImageReference(org.apache.tapestry.IComponent, java.lang.String) to class $ResponseBuilder_18d419d3852: java.io.IOException: invalid constant type: 15

org.apache.hivemind.ApplicationRuntimeException: Unable to add method java.lang.String getPreloadedImageReference(org.apache.tapestry.IComponent, java.lang.String) to class $ResponseBuilder_18d419d3852: java.io.IOException: invalid constant type: 15

java.lang.RuntimeException: java.io.IOException: invalid constant type: 15
...

В логе Tomcat Localhost Log при запуске это:

25-Jan-2024 22:44:25.973 SEVERE [main] org.apache.catalina.core.StandardContext.loadOnStartup Servlet [app] in web application [/task-tapestry] threw load() exception
    java.io.IOException: invalid constant type: 15
        at javassist.bytecode.ConstPool.readOne(ConstPool.java:1023)
        at javassist.bytecode.ConstPool.read(ConstPool.java:966)
        at javassist.bytecode.ConstPool.<init>(ConstPool.java:127)
        at javassist.bytecode.ClassFile.read(ClassFile.java:693)
        at javassist.bytecode.ClassFile.<init>(ClassFile.java:85)
...

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>ru.tapestrytest</groupId>
  <artifactId>task-tapestry</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>task-tapestry Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.tapestry/tapestry-framework -->
    <dependency>
      <groupId>org.apache.tapestry</groupId>
      <artifactId>tapestry-framework</artifactId>
      <version>4.1.6</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.tapestry/tapestry-annotations -->
    <dependency>
      <groupId>org.apache.tapestry</groupId>
      <artifactId>tapestry-annotations</artifactId>
      <version>4.1.6</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.tapestry/tapestry-contrib -->
    <dependency>
      <groupId>org.apache.tapestry</groupId>
      <artifactId>tapestry-contrib</artifactId>
      <version>4.1.6</version>
    </dependency>

    <dependency>
      <groupId>org.javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.25.0-GA</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>task-tapestry</finalName>
  </build>
</project>

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Tapestry 4 TestProject</display-name>

  <context-param>
    <!-- tell Tapestry where to look for pages, components and mixins -->
    <param-name>tapestry.app-package</param-name>
    <param-value>ru.tapestrytest</param-value>
  </context-param>

  <servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/app</url-pattern>
  </servlet-mapping>

</web-app>

app.application

<?xml version="1.0"?>
<!DOCTYPE application PUBLIC
        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
        "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">

<application name="app">
    <meta key="org.apache.tapestry.page-class-packages" value="ru.tapestrytest.pages"/>
</application>

Вопрос: я где-то что-то не прописал, не указал зависимости какие-то, или указал не тех версий?


Ответы (1 шт):

Автор решения: Ivan Varnavsky

Отвечу. Чтобы всё это заработало была изменена версия Java в проекте на 1.7, а так же были изменены файлы pom.xml (изменена версия javax.servlet-api на 3.0.1 и убрана зависимость javassist):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>ru.tapestrytest</groupId>
    <artifactId>task-tapestry</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>task-tapestry Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <properties>
        <maven.compiler.source>7</maven.compiler.source>
        <maven.compiler.target>7</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.tapestry/tapestry-framework -->
        <dependency>
            <groupId>org.apache.tapestry</groupId>
            <artifactId>tapestry-framework</artifactId>
            <version>4.1.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.tapestry/tapestry-annotations -->
        <dependency>
            <groupId>org.apache.tapestry</groupId>
            <artifactId>tapestry-annotations</artifactId>
            <version>4.1.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.tapestry/tapestry-contrib -->
        <dependency>
            <groupId>org.apache.tapestry</groupId>
            <artifactId>tapestry-contrib</artifactId>
            <version>4.1.6</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>task-tapestry</finalName>
    </build>
</project>

и добавлена строчка в app.application, чтобы не было ошибки домашней страницы:

<?xml version="1.0"?>
<!DOCTYPE application PUBLIC
        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
        "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">

<application name="app">
    <meta key="org.apache.tapestry.page-class-packages" value="ru.tapestrytest.pages"/>
    <meta key="org.apache.tapestry.home-page" value="Info"/>
</application>

Запущено все это на Tomcat 6.0.30.

P.S.: спасибо @NowhereMan за подсказку!

→ Ссылка