@BeforeClass public static void startServer() throws Exception { server = new Server(); ServerConnector connector = new ServerConnector(server); connector.setPort(0); server.addConnector(connector); ContextHandlerCollection contexts = new ContextHandlerCollection(); File dir = MavenTestingUtils.getTargetTestingDir(ResourceHandlerRangeTest.class.getSimpleName()); FS.ensureEmpty(dir); File rangeFile = new File(dir, "range.txt"); try (FileWriter writer = new FileWriter(rangeFile)) { writer.append("0123456789"); writer.flush(); } ContextHandler contextHandler = new ContextHandler(); ResourceHandler contentResourceHandler = new ResourceHandler(); contextHandler.setBaseResource(Resource.newResource(dir.getAbsolutePath())); contextHandler.setHandler(contentResourceHandler); contextHandler.setContextPath("/"); contexts.addHandler(contextHandler); server.setHandler(contexts); server.start(); String host = connector.getHost(); if (host == null) { host = "localhost"; } int port = connector.getLocalPort(); serverUri = new URI(String.format("http://%s:%d/", host, port)); }
private void run() throws Exception { InetSocketAddress address; if (this.host != null) { address = new InetSocketAddress(this.host, this.port); } else { address = new InetSocketAddress(this.port); } Server server = new Server(address); ContextHandlerCollection handlerCollection = new ContextHandlerCollection(); final ModelRegistry modelRegistry = new ModelRegistry(); final MetricRegistry metricRegistry = new MetricRegistry(); Binder binder = new AbstractBinder() { @Override protected void configure() { bind(modelRegistry).to(ModelRegistry.class); bind(metricRegistry).to(MetricRegistry.class); } }; ResourceConfig config = new ResourceConfig(ModelResource.class); config.register(binder); config.register(JacksonFeature.class); config.register(MultiPartFeature.class); config.register(ObjectMapperProvider.class); config.register(RolesAllowedDynamicFeature.class); // Naive implementation that grants the "admin" role to all local network users config.register(NetworkSecurityContextFilter.class); ServletContextHandler servletHandler = new ServletContextHandler(); servletHandler.setContextPath(this.contextPath); ServletContainer jerseyServlet = new ServletContainer(config); servletHandler.addServlet(new ServletHolder(jerseyServlet), "/*"); InstrumentedHandler instrumentedHandler = new InstrumentedHandler(metricRegistry); instrumentedHandler.setHandler(servletHandler); handlerCollection.addHandler(instrumentedHandler); if (this.consoleWar != null) { WebAppContext consoleHandler = new WebAppContext(); consoleHandler.setContextPath(this.contextPath + "/console"); // XXX consoleHandler.setWar(this.consoleWar.getAbsolutePath()); handlerCollection.addHandler(consoleHandler); } server.setHandler(handlerCollection); DirectoryDeployer deployer = null; if (this.modelDir != null) { if (!this.modelDir.isDirectory()) { throw new IOException(this.modelDir.getAbsolutePath() + " is not a directory"); } deployer = new DirectoryDeployer(modelRegistry, this.modelDir.toPath()); } server.start(); if (deployer != null) { deployer.start(); } server.join(); if (deployer != null) { deployer.interrupt(); deployer.join(); } }