1

I had to migrate from maven-jetty-plugin to jetty-maven-plugin. I can see that the context is deployed when I start jetty with jetty:run, the app is being initialized but the servlet is not found. It works correctly with maven-jetty-plugin.

Java

@RequestMapping(value = "/handshake", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public void performHandShake(@org.springframework.web.bind.annotation.RequestBody String requestData, HttpServletResponse response) throws IOException {

web.xml

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Maven

        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${maven-jetty-plugin.version}</version>

            <configuration>
                <webApp>
                    <contextPath>pos-json</contextPath>
                </webApp>
                <scanIntervalSeconds>0</scanIntervalSeconds>

Browser at http://localhost:8080/

No context on this server matched or handled this request.
Contexts known to this server are:
pos-json ---> o.e.j.m.p.JettyWebAppContext@6c6366cf{pos-json,file:///C:/dev/projekty/pos-backend/src/main/webapp/,AVAILABLE}{file:///C:/dev/projekty/pos-backend/src/main/webapp/}

Browser at http://localhost:8080/pos-json/handshake

HTTP ERROR 404
Problem accessing /pos-json/handshake. Reason:   Not Found

Jetty

[INFO] Classes = C:\dev\projekty\pos-backend\target\classes
[INFO] Context path = pos-json
[INFO] Tmp directory = C:\dev\projekty\pos-backend\target\tmp
[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml
[INFO] Web overrides =  none
[INFO] web.xml file = file:///C:/dev/projekty/pos-backend/src/main/webapp/WEB-INF/web.xml
[INFO] Webapp directory = C:\dev\projekty\pos-backend\src\main\webapp
2017-10-20 14:21:17.907:INFO:oejs.Server:main: jetty-9.4.7.v20170914
2017-10-20 14:21:23.050:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=4520ms
2017-10-20 14:21:23.486:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
2017-10-20 14:21:23.486:INFO:oejs.session:main: No SessionScavenger set, using defaults
2017-10-20 14:21:23.490:INFO:oejs.session:main: Scavenging every 660000ms
2017-10-20 14:21:24.498:INFO:oejshC.pos_json:main: Initializing Spring FrameworkServlet 'dispatcher'
2017-10-20 14:21:39,828 INFO [main] o.s.w.s.m.m.a.RequestMappingHandlerMapping Mapped "{[/handshake],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public void pos.backend.device.controller.DeviceJsonController.performHandShake(java.lang.String,javax.servlet.http.HttpServletResponse) throws java.io.IOException
2017-10-20 14:21:40,167 INFO [main] o.s.w.s.m.m.a.RequestMappingHandlerAdapter Looking for @ControllerAdvice: WebApplicationContext for namespace 'dispatcher-servlet': startup date [Fri Oct 20 14:21:24 CEST 2017]; root of context hierarchy
2017-10-20 14:21:40.783:INFO:oejsh.ContextHandler:main: Started o.e.j.m.p.JettyWebAppContext@6c6366cf{pos-json,file:///C:/dev/projekty/pos-backend/src/main/webapp/,AVAILABLE}{file:///C:/dev/projekty/pos-backend/src/main/webapp/}
2017-10-20 14:21:41.017:INFO:oejs.AbstractConnector:main: Started ServerConnector@179efe9a{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
Leos Literak
  • 8,805
  • 19
  • 81
  • 156
  • The first thing I would do is to add leading "/" into the context path in the jetty plugin config. Then keep in mind that your endpoint expects POST request. while the browser issues GET. When set properly, the browser will get 405 Method Not Allowed. – diginoise Oct 23 '17 at 09:59
  • Thanks for the tip. When I updated the param to /smartpos-json/, it started to work! Original plugin did not use slashes. Can you write answer, so I can accept it later? – Leos Literak Oct 23 '17 at 10:22
  • Consider it done! – diginoise Oct 23 '17 at 14:50

1 Answers1

1

From the documentation about the configuration of jetty-maven-plugin is seems that in contextPath they suggest that you probably (very vague I must admit) need to add leading forward-slash "/", so that your maven plugin definition should read:

    <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${maven-jetty-plugin.version}</version>

        <configuration>
            <webApp>
                <contextPath>/pos-json</contextPath>
            </webApp>
            <scanIntervalSeconds>0</scanIntervalSeconds>
        </configuration>
    </plugin>

Hope this helps!

diginoise
  • 7,352
  • 2
  • 31
  • 39