Как исключить сервлет-апи-2.4 в Groovy - PullRequest
0 голосов
/ 24 апреля 2018

Я хочу использовать Jetty 9 (с сервлетом Api 3.1) в моем приложении Groovy 2.4.Но Groovy 2.4 поставляется в комплекте с servlet-api-2.4.jar.Это приводит к ошибкам, таким как

java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I

Я пытался захватить javax.servlet-api версии 3.1.0 с помощью винограда, но безрезультатно.По-видимому, jar сервлет-апи groovy переопределяет виноград.

Как я могу это сделать?

Полный код, который выдает вышеуказанную ошибку при попадании в конечную точку с запросом:

@Grab(group="javax.servlet", module="javax.servlet-api", version="3.1.0", force=true)
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import javax.servlet.ServletException

@Grab(group="org.eclipse.jetty", module="jetty-servlet", version="9.4.8.v20171121")
import org.eclipse.jetty.servlet.ServletContextHandler

@Grab(group="org.eclipse.jetty", module="jetty-server", version="9.4.8.v20171121")
import org.eclipse.jetty.server.Server


public class WebHookServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        def slurper = new groovy.json.JsonSlurper()
        def msg = slurper.parse(req.inputStream)

        // Do something with the message

        resp.setStatus(HttpServletResponse.SC_NO_CONTENT)
    }
}

Server server = new Server(8080)
ServletContextHandler context = new ServletContextHandler(server, "/ws", ServletContextHandler.SESSIONS)
context.addServlet(WebHookServlet.class, "/webhook")
server.start()
server.join() 

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Groovy> 2.5 обновил API сервлета до 3.0.1 https://issues.apache.org/jira/browse/GROOVY-7899

Не уверен в разнице между 3.0.1 и 3.1, которую использует Jetty 9, но после нескольких коротких тестов, онкажется, работает хорошо.

0 голосов
/ 24 апреля 2018

Попробуйте просто добавить ...

@GrabExclude("javax.servlet:servlet-api")

Это должно исключать стандартные (более старые) координаты / местоположение для ряда зависимостей Servlet 2.x.

Но есть и другие места для Servlet 2.5. Попробуйте перечислить свои зависимости в командной строке, найдите другие местоположения координат <groupId>:<artifactId> (без версии), чтобы увидеть, откуда может возникнуть проблема.

...