You created oContext but never really added it as a handler to your server.

Add this, before _oServer.start();

// import org.eclipse.jetty.server.handler.HandlerList;
// import org.eclipse.jetty.server.handler.DefaultHandler;
HandlerList handlers = new HandlerList();
handlers.addHandler(oContext);
handlers.addHandler(new DefaultHandler());
_oServer.setHandler(handlers);


Joakim Erdfelt / [email protected]


On Tue, May 21, 2019 at 2:41 AM David P <[email protected]> wrote:

> I want to use jetty to receive json POSTs, and use the values to call
> setters in another class that's part of a service.
>
> Tests using curl return a 404, and dumping at jetty start reveals no
> routes from query paths to handlers. This seems to be the relevant section
> of the dump:
>
>  += ServerConnector@25b485ba{HTTP/1.1,[http/1.1]}{0.0.0.0:8081} - STARTED
>  |   +~ org.eclipse.jetty.server.Server@731f8236 - STARTING
>  |   +~ qtp1113619023{STARTED,6<=6<=6,i=1,q=0} - STARTED
>  |   += org.eclipse.jetty.util.thread.ScheduledExecutorScheduler@1188e820
> - STARTED
>  |   +- org.eclipse.jetty.io.ArrayByteBufferPool@240237d2
>  |   += HttpConnectionFactory@33b37288[HTTP/1.1] - STARTED
>  |   |   +- HttpConfiguration@25a65b77{32768/8192,8192/8192,https://:0,[]}
>  |   +=
> org.eclipse.jetty.server.ServerConnector$ServerConnectorManager@2ed0fbae
> - STARTED
>  |   |   += org.eclipse.jetty.io.ManagedSelector@212bf671 id=0 keys=0
> selected=0 id=0
>  |   |   |   +- sun.nio.ch.EPollSelectorImpl@6298dace keys=0
>  |   |   += org.eclipse.jetty.io.ManagedSelector@2aece37d id=1 keys=0
> selected=0 id=1
>  |   |       +- sun.nio.ch.EPollSelectorImpl@43668d89 keys=0
>  |   +- sun.nio.ch.ServerSocketChannelImpl[/0:0:0:0:0:0:0:0:8081]
>  |   +- qtp1113619023-24-acceptor-0@1b83efaf-ServerConnector
> @25b485ba{HTTP/1.1,[http/1.1]}{0.0.0.0:8081}
>
> I've tried switching my context path and query path. How should I change
> my code so it handles a request like this?
>
>     curl -d '{"name1":"value1", "name2":"value2"}' -H "Content-Type:
> application/json" -X POST http://localhost:8081/metadataForUtterance
>
> Here's the code:
>
>     //Adapted from https://www.baeldung.com/jetty-embedded
>     //
> https://github.com/eugenp/tutorials/blob/master/libraries-server/src/main/java/com/baeldung/jetty/JettyServer.java
>
>     import org.apache.log4j.Logger;
>     import org.eclipse.jetty.server.Connector;
>     import org.eclipse.jetty.server.Server;
>     import org.eclipse.jetty.server.ServerConnector;
>     import org.eclipse.jetty.servlet.ServletContextHandler;
>     import org.eclipse.jetty.servlet.ServletHolder;
>     import org.eclipse.jetty.util.thread.QueuedThreadPool;
>
>     class JettyServer {
>         private static final Logger s_oLogger =
> Logger.getLogger(JettyServer.class);
>
>         private static final String s_sContextPath = "/";
>         private static final String s_sQueryPath = "/metadataForUtterance";
>         private static final int s_iPort = 8081;
>         //When the two values below were both set to 1, the service log
> revealed:
>         // java.lang.IllegalStateException: Insufficient threads: max=1 <
> needed(acceptors=1 + selectors=4 + request=1)
>         private static final int s_iMaxThreads = 6;
>         private static final int s_iMinThreads = 6;
>         private static final int s_iMsecsIdleTimeout = 120;
>
>         private Server _oServer;
>
>         void start(MyFriendClass oFriendNeedingMetadata)
>         throws Exception
>         {
>             QueuedThreadPool oThreadPool
>                     = new QueuedThreadPool(
>                             s_iMaxThreads,
>                             s_iMinThreads,
>                             s_iMsecsIdleTimeout
>                     );
>
>             _oServer = new Server( oThreadPool );
>
>             //DEBUG
>             // See
> https://www.eclipse.org/jetty/documentation/current/jetty-dump-tool.html
>             oThreadPool.setDetailedDump(true);
>             _oServer.setDumpAfterStart(true);
>
>             ServerConnector oConnector = new ServerConnector( _oServer );
>             oConnector.setPort( s_iPort );
>             _oServer.setConnectors( new Connector[] { oConnector } );
>
>             //Adapted from https://stackoverflow.com/a/39440430/6856046
>             // in order to pass oFriendNeedingMetadata to the
> UtteranceMetadataFromPost instance.
>             ServletContextHandler oContext = new ServletContextHandler();
>             oContext.setContextPath( s_sContextPath );
>             UtteranceMetadataFromPost oServletForMetadataPosts
>                     = new UtteranceMetadataFromPost(
> oFriendNeedingMetadata );
>             ServletHolder oServletHolder = new
> ServletHolder(oServletForMetadataPosts);
>             oContext.addServlet(
>                 oServletHolder,
>                 s_sQueryPath
>             );
>
>             _oServer.start();
>
>             s_oLogger.debug(
>                 "Started: s_sContextPath["+ s_sContextPath
>                 +"] s_iPort["+ s_iPort
>                 +"] s_sQueryPath["+ s_sQueryPath
>                 +"] s_iMaxThreads["+ s_iMaxThreads
>                 +"] s_iMinThreads["+ s_iMinThreads
>                 +"] s_iMsecsIdleTimeout["+ s_iMsecsIdleTimeout
>                 +"]."
>             );
>         }
>
>         void stop() throws Exception {
>             _oServer.stop();
>         }
>     }
>
> Cheers,
> David
>
> Btw, I also tried following
> https://www.eclipse.org/jetty/documentation/current/advanced-embedding.html
> One problem there is that the uber jar is only ~500kB and seems corrupted
> every time I download it:
>
>     curl -o jetty-all-uber.jar
> https://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/9.4.18.v20190429/jetty-all-9.4.18.v20190429-uber.jar
> _______________________________________________
> jetty-users mailing list
> [email protected]
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
> https://www.eclipse.org/mailman/listinfo/jetty-users
_______________________________________________
jetty-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://www.eclipse.org/mailman/listinfo/jetty-users

Reply via email to