From d63ff02b97d06f5208109a982b7a11e716a36880 Mon Sep 17 00:00:00 2001 From: Kc Date: Sun, 16 Sep 2018 23:24:20 +0200 Subject: [PATCH] CHANGED: added first API resources with jetty and jersey --- pom.xml | 41 +++++++++++---- src/Start.java | 20 ++++++++ src/api/ApiService.java | 99 ++++++++++++++++++++----------------- src/api/BlocksResource.java | 25 ++++++---- src/settings/Settings.java | 2 +- 5 files changed, 123 insertions(+), 64 deletions(-) create mode 100644 src/Start.java diff --git a/pom.xml b/pom.xml index ef1ef89d..a4c754e2 100644 --- a/pom.xml +++ b/pom.xml @@ -43,19 +43,42 @@ 3.3 - org.glassfish.jersey.core - jersey-server - 2.27 + org.hsqldb + hsqldb + 2.4.0 + jar - org.glassfish.jersey.containers - jersey-container-servlet - 2.27 + org.glassfish.jersey.core + jersey-server + 2.27 - org.eclipse.jetty - jetty-maven-plugin - 9.4.11.v20180605 + javax.servlet + javax.servlet-api + 4.0.1 + + + org.eclipse.jetty + jetty-server + 9.4.11.v20180605 + config + + + org.glassfish.jersey.containers + jersey-container-servlet-core + 2.27 + + + org.eclipse.jetty + jetty-servlet + 9.4.11.v20180605 + jar + + + org.glassfish.jersey.inject + jersey-hk2 + 2.27 \ No newline at end of file diff --git a/src/Start.java b/src/Start.java new file mode 100644 index 00000000..99632030 --- /dev/null +++ b/src/Start.java @@ -0,0 +1,20 @@ + +import api.ApiService; +import repository.DataException; +import repository.RepositoryFactory; +import repository.RepositoryManager; +import repository.hsqldb.HSQLDBRepositoryFactory; + + +public class Start { + private static final String connectionUrl = "jdbc:hsqldb:mem:db/test;create=true;close_result=true;sql.strict_exec=true;sql.enforce_names=true;sql.syntax_mys=true"; + + public static void main(String args[]) throws DataException + { + RepositoryFactory repositoryFactory = new HSQLDBRepositoryFactory(connectionUrl); + RepositoryManager.setRepositoryFactory(repositoryFactory); + + ApiService apiService = new ApiService(); + apiService.start(); + } +} diff --git a/src/api/ApiService.java b/src/api/ApiService.java index 509f6913..e523a7d6 100644 --- a/src/api/ApiService.java +++ b/src/api/ApiService.java @@ -1,5 +1,7 @@ package api; +//import io.swagger.jaxrs.config.DefaultJaxrsConfig; + import java.util.HashSet; import java.util.Set; @@ -10,62 +12,71 @@ import org.eclipse.jetty.servlet.ServletHolder; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.servlet.ServletContainer; + import settings.Settings; public class ApiService { + private Server server; - public Server server; - - public ApiService() - { - //CREATE CONFIG - Set> s = new HashSet>(); + public ApiService() + { + // resources to register + Set> s = new HashSet>(); s.add(BlocksResource.class); - - ResourceConfig config = new ResourceConfig(s); - - //CREATE CONTAINER - ServletContainer container = new ServletContainer(config); - - //CREATE CONTEXT - ServletContextHandler context = new ServletContextHandler(); - context.setContextPath("/"); - context.addServlet(new ServletHolder(container),"/*"); + ResourceConfig config = new ResourceConfig(s); + + // create RPC server + this.server = new Server(Settings.getInstance().getRpcPort()); - //CREATE WHITELIST + // whitelist InetAccessHandler accessHandler = new InetAccessHandler(); for(String pattern : Settings.getInstance().getRpcAllowed()) - accessHandler.include(pattern); + accessHandler.include(pattern); + this.server.setHandler(accessHandler); + + // context + ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS); + context.setContextPath("/"); accessHandler.setHandler(context); - //CREATE RPC SERVER - this.server = new Server(Settings.getInstance().getRpcPort()); - this.server.setHandler(accessHandler); - } - - public void start() - { - try + // API servlet + ServletContainer container = new ServletContainer(config); + ServletHolder apiServlet = new ServletHolder(container); + apiServlet.setInitOrder(1); + context.addServlet(apiServlet, "/api/*"); + + /* + // Setup Swagger servlet + ServletHolder swaggerServlet = context.addServlet(DefaultJaxrsConfig.class, "/swagger-core"); + swaggerServlet.setInitOrder(2); + swaggerServlet.setInitParameter("api.version", "1.0.0"); + */ + + } + + public void start() + { + try { - //START RPC - server.start(); - } + //START RPC + server.start(); + } catch (Exception e) - { - //FAILED TO START RPC - } - } - - public void stop() - { - try { - //STOP RPC - server.stop(); - } + //FAILED TO START RPC + } + } + + public void stop() + { + try + { + //STOP RPC + server.stop(); + } catch (Exception e) - { - //FAILED TO STOP RPC - } - } + { + //FAILED TO STOP RPC + } + } } diff --git a/src/api/BlocksResource.java b/src/api/BlocksResource.java index 0b2f0427..d46744a2 100644 --- a/src/api/BlocksResource.java +++ b/src/api/BlocksResource.java @@ -1,9 +1,12 @@ package api; +import javax.servlet.http.HttpServletRequest; + import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import repository.DataException; @@ -13,16 +16,18 @@ import repository.RepositoryManager; @Path("blocks") @Produces(MediaType.APPLICATION_JSON) public class BlocksResource { + @Context + HttpServletRequest request; - @GET - @Path("/height") - public static String getHeight() - { - try (final Repository repository = RepositoryManager.getRepository()) { - return String.valueOf(repository.getBlockRepository().getBlockchainHeight()); - } catch (Exception e) { - throw new WebApplicationException("What happened?"); - } - } + @GET + @Path("/height") + public static String getHeight() + { + try (final Repository repository = RepositoryManager.getRepository()) { + return String.valueOf(repository.getBlockRepository().getBlockchainHeight()); + } catch (Exception e) { + throw new WebApplicationException("What happened?"); + } + } } diff --git a/src/settings/Settings.java b/src/settings/Settings.java index 4600f867..288020b6 100644 --- a/src/settings/Settings.java +++ b/src/settings/Settings.java @@ -26,7 +26,7 @@ public class Settings { //RPC private int rpcPort = 9085; - private List rpcAllowed = new ArrayList(Arrays.asList("127.0.0.1")); + private List rpcAllowed = new ArrayList(Arrays.asList("127.0.0.1", "::1")); // ipv4, ipv6 private boolean rpcEnabled = true; // Constants