Repository: incubator-juneau Updated Branches: refs/heads/master 779e1d94c -> 6f41a0523
Add methods to RestMicroservice for registering servlets programmatically. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/6f41a052 Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/6f41a052 Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/6f41a052 Branch: refs/heads/master Commit: 6f41a0523eec03a6d62026c0281c64222a769b54 Parents: 779e1d9 Author: JamesBognar <[email protected]> Authored: Sat Jul 15 10:15:39 2017 -0400 Committer: JamesBognar <[email protected]> Committed: Sat Jul 15 10:15:39 2017 -0400 ---------------------------------------------------------------------- juneau-core/src/main/javadoc/overview.html | 12 ++++ .../juneau/microservice/RestMicroservice.java | 64 +++++++++++++++++--- 2 files changed, 69 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6f41a052/juneau-core/src/main/javadoc/overview.html ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/javadoc/overview.html b/juneau-core/src/main/javadoc/overview.html index d800f0e..855fcec 100644 --- a/juneau-core/src/main/javadoc/overview.html +++ b/juneau-core/src/main/javadoc/overview.html @@ -6911,6 +6911,18 @@ <br>Allows you to specify a resource resolver on the servlet context to make it easier to work with dependency injection frameworks. </ul> + + <h6 class='topic'>org.apache.juneau.rest.microservice</h6> + <ul class='spaced-list'> + <li> + New methods on {@link org.apache.juneau.microservice.RestMicroservice}: + <ul> + <li>{@link org.apache.juneau.microservice.RestMicroservice#addServlet(Servlet,String) addServlet(Servlet,String)} + <li>{@link org.apache.juneau.microservice.RestMicroservice#addServletAttribute(String,Object) addServletAttribute(String,Object)} + <li>{@link org.apache.juneau.microservice.RestMicroservice#getServer() getServer()} + <li>{@link org.apache.juneau.microservice.RestMicroservice#getServletContextHandler() getServletContextHandler()} + </ul> + </ul> </div> <!-- ======================================================================================================== --> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6f41a052/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java ---------------------------------------------------------------------- diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java index 9dd4639..cea6e5a 100755 --- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java +++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java @@ -77,7 +77,8 @@ import org.eclipse.jetty.util.ssl.*; * </ul> */ public class RestMicroservice extends Microservice { - + + ServletContextHandler servletContextHandler; Server server; int port; String contextPath; @@ -393,20 +394,69 @@ public class RestMicroservice extends Microservice { server = new Server(port); } - ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); + servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); String authType = cf.getString("REST/authType", mf.getString("Rest-AuthType", "NONE")); if (authType.equals("BASIC")) - context.setSecurityHandler(basicAuth(cf, mf)); + servletContextHandler.setSecurityHandler(basicAuth(cf, mf)); - context.setContextPath(contextPath); - server.setHandler(context); + servletContextHandler.setContextPath(contextPath); + server.setHandler(servletContextHandler); for (Map.Entry<String,Class<? extends Servlet>> e : getResourceMap().entrySet()) - context.addServlet(e.getValue(), e.getKey()).setInitOrder(0); - + servletContextHandler.addServlet(e.getValue(), e.getKey()).setInitOrder(0); + return server; } + + /** + * Adds an arbitrary servlet to this microservice. + * + * @param servlet The servlet instance. + * @param pathSpec The context path of the servlet. + * @return This object (for method chaining). + * @throws RuntimeException if {@link #createServer()} has not previously been called. + */ + public RestMicroservice addServlet(Servlet servlet, String pathSpec) { + if (servletContextHandler == null) + throw new RuntimeException("Servlet context handler not found. createServer() must be called first."); + ServletHolder sh = new ServletHolder(servlet); + servletContextHandler.addServlet(sh, pathSpec); + return this; + } + + /** + * Adds a servlet attribute to the Jetty server. + * + * @param name The server attribute name. + * @param value The context path of the servlet. + * @return This object (for method chaining). + * @throws RuntimeException if {@link #createServer()} has not previously been called. + */ + public RestMicroservice addServletAttribute(String name, Object value) { + if (server == null) + throw new RuntimeException("Server not found. createServer() must be called first."); + server.setAttribute(name, value); + return this; + } + + /** + * Returns the underlying Jetty server. + * + * @return The underlying Jetty server, or <jk>null</jk> if {@link #createServer()} has not yet been called. + */ + public Server getServer() { + return server; + } + + /** + * Returns the underlying servlet context handler. + * + * @return The underlying servlet context handler, or <jk>null</jk> if {@link #createServer()} has not yet been called. + */ + public ServletContextHandler getServletContextHandler() { + return servletContextHandler; + } private static int findOpenPort(int[] ports) { for (int port : ports) {
