Roopchand
Roopchand

Reputation: 39

Jetty 12x: NoSuchMethodError: 'void org.eclipse.jetty.server.ServerConnector.setSoLingerTime(int)'

I am trying to upgrade the jetty version from 9x to 12x and getting the below exception when starting my application.

Exception in thread "main" java.lang.NoSuchMethodError: 'void org.eclipse.jetty.server.ServerConnector.setSoLingerTime(int)'
        at org.restlet.ext.jetty.JettyServerHelper.createConnector(JettyServerHelper.java:325)
        at org.restlet.ext.jetty.JettyServerHelper.createServer(JettyServerHelper.java:376)
        at org.restlet.ext.jetty.JettyServerHelper.getWrappedServer(JettyServerHelper.java:685)
        at org.restlet.ext.jetty.JettyServerHelper.start(JettyServerHelper.java:702)
        at org.restlet.Server.start(Server.java:579)
        at org.restlet.Component.startServers(Component.java:642)
        at org.restlet.Component.start(Component.java:567)
        at com.gkp.StandAloneReportingService.setupHost(StandAloneReportingService.java:402)
        at com.gkp.StandAloneReportingService.init(StandAloneReportingService.java:352)
        at com.gkp.StandAloneReportingService.<init>(StandAloneReportingService.java:287)
        at com.gkp.StandAloneReportingService.main(StandAloneReportingService.java:213)

Environment :

Code: -

    private void setupHost() throws Exception {
        // start a new Restlet component
        component = new Component();

        // setting up server connectors
        setupServerConnectors(component.getServers());

        // setting up JMS listening port
        setupJMSListeningPort();
        
        // creating a http authentication layer if configured
        setupHttpAuthentication(component);

        component.start();
    }

Pom.xml :

<dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-client</artifactId>
        <version>12.0.8</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>12.0.8</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-http</artifactId>
        <version>12.0.8</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-io</artifactId>
        <version>12.0.8</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-util</artifactId>
        <version>12.0.8</version>
    </dependency>
    <dependency>
        <groupId>org.restlet.jse</groupId>
        <artifactId>org.restlet.ext.jetty</artifactId>
        <version>2.4.1</version>
    </dependency>

Dependency Tree:

enter image description here

Thank you for your help!

Upvotes: -1

Views: 395

Answers (1)

Joakim Erdfelt
Joakim Erdfelt

Reputation: 49545

ServerConnector.setSoLinger(int) was deprecated back in 2018, with no replacement.

This is because java.net.StandardSocketOptions.SO_LINGER has no purpose or impact on non-blocking sockets, which Jetty uses exclusively.

The last time java.net.StandardSocketOptions.SO_LINGER was viable was when all of the of the following was true.

  • Using Jetty 7 or older with the non-NIO connectors.
  • Using Java 6 or older.

Since Jetty 12 is using a newer version of Java, and only uses NIO, java.net.StandardSocketOptions.SO_LINGER is not, and cannot, be used.

Just remove that line of code from your codebase, it had no purpose on Jetty 9, and was basically a no-op anyway.

Note: restlet does not support Jetty 12 (yet)

https://github.com/restlet/restlet-framework-java/issues/1396

Upvotes: 1

Related Questions