Search code examples
mavenjax-rspom.xmlguacamoletomcat10

Guacamole 1.5.3 on Tomcat 10 throws java.lang.NoSuchMethodError: 'void jakarta.servlet.http.HttpServletResponse.setStatus(int, java.lang.String)'


This is the error in the logs when ran the guacamole

org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for > java.lang.NoSuchMethodError: 'void jakarta.servlet.http.HttpServletResponse.setStatus(int, java.lang.String)' at org.glassfish.jersey.servlet.internal.ResponseWriter.writeResponseStatusAndHeaders(ResponseWriter.java:147) at org.glassfish.jersey.server.ServerRuntime$Responder$1.getOutputStream(ServerRuntime.java:639)

below given is the pom.xml file , jersey version is 3.1.3 which is the latest.

pom.xml

    <!-- Jakarta servlet API -->
    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>6.0.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>jakarta.servlet.jsp</groupId>
        <artifactId>jakarta.servlet.jsp-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>jakarta.el</groupId>
        <artifactId>jakarta.el-api</artifactId>
        <version>5.0.0</version>
        <scope>provided</scope>
    </dependency>

    <!-- Jakarta WebSocket API -->
    <dependency>
        <groupId>jakarta.websocket</groupId>
        <artifactId>jakarta.websocket-api</artifactId>
        <version>2.1.0</version>
        <scope>provided</scope>
    </dependency>

    <!-- Logging -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jul-to-slf4j</artifactId>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <exclusions>

            <!-- Exclude optional dependency on JavaMail -->
            <exclusion>
                 <groupId>com.sun.mail</groupId>
                 <artifactId>jakarta.mail</artifactId>
            </exclusion>

        </exclusions>
    </dependency>

    <!-- Guacamole Extension API -->
    <dependency>
        <groupId>org.apache.guacamole</groupId>
        <artifactId>guacamole-ext</artifactId>
        <version>1.5.3</version>
    </dependency>

    <!-- Guacamole JavaScript API -->
    <dependency>
        <groupId>org.apache.guacamole</groupId>
        <artifactId>guacamole-common-js</artifactId>
        <version>1.5.3</version>
        <type>zip</type>
        <scope>runtime</scope>
    </dependency>

    <!-- Jetty 8 servlet API (websocket)  -->
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-websocket</artifactId>
        <version>8.1.1.v20120215</version>
        <scope>provided</scope>
    </dependency>

    <!-- Jetty 9.0 servlet API (websocket)  -->
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-parent</artifactId>
        <version>20</version>
        <scope>provided</scope>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-api</artifactId>
        <version>9.0.7.v20131107</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-servlet</artifactId>
        <version>9.0.7.v20131107</version>
        <scope>provided</scope>
    </dependency>

    <!-- Tomcat servlet API (websocket)  -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-catalina</artifactId>
        <version>7.0.37</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-coyote</artifactId>
        <version>7.0.37</version>
        <scope>provided</scope>
    </dependency>

    <!-- Guice - Dependency Injection -->
    <dependency>
        <groupId>ru.vyarus.guice.jakarta</groupId>
        <artifactId>guice</artifactId>
        <version>5.1.0-rc.2</version>
    </dependency>
    <dependency>
        <groupId>com.google.inject.extensions</groupId>
        <artifactId>guice-assistedinject</artifactId>
        <version>7.0.0</version>
    </dependency>
    <dependency>
        <groupId>ru.vyarus.guice.jakarta</groupId>
        <artifactId>guice-assistedinject</artifactId>
        <version>5.1.0-rc.2</version>
    </dependency>
    <!-- Jersey Implementation -->
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>3.1.3</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>3.1.3</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>3.1.3</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>3.1.3</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.inject</groupId>
        <artifactId>jersey-hk2</artifactId>
        <version>3.1.3</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.hk2</groupId>
        <artifactId>guice-bridge</artifactId>
        <version>3.0.4</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>3.1.3</version>
    </dependency>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>listenablefuture</artifactId>
        <version>1.0</version>
    </dependency>
    <!-- jakarta annotations -->
    <dependency>
        <groupId>jakarta.annotation</groupId>
        <artifactId>jakarta.annotation-api</artifactId>
        <version>2.1.1</version>
    </dependency>
    
    <!-- Guava Base Libraries -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
    </dependency>

    <!-- Force use of version 1.2.2 (transitive dependencies of
        jersey-media-json-jackson disagree on 1.2.1 vs. 1.2.2) -->
    <dependency>
        <groupId>jakarta.activation</groupId>
        <artifactId>jakarta.activation-api</artifactId>
        <version>2.0.1</version>
    </dependency>      

</dependencies>   

Solution

  • Compatibility between Guacamole and Tomcat 10 is still unresolved at this time: https://issues.apache.org/jira/browse/GUACAMOLE-1325. Until the issue is resolved, you can deploy with Tomcat 8.5.x or 9.x.