Search in sources :

Example 11 with JsonSlurper

use of groovy.json.JsonSlurper in project groovity by disney.

the class GroovityServlet method init.

/**
 * see {@link GenericServlet#init}
 */
@Override
public void init() throws ServletException {
    try {
        LOG.info("Initializing GroovityServlet");
        ServletConfig config = getServletConfig();
        if (groovityScriptViewFactory == null) {
            GroovityBuilder builder = new GroovityBuilder();
            configProperties = new Properties();
            String propsFile = getParam(PROPS_FILE);
            if (isNotBlank(propsFile)) {
                URL url = config.getServletContext().getClassLoader().getResource(propsFile);
                if (url == null && propsFile.startsWith("/")) {
                    url = config.getServletContext().getResource(propsFile);
                }
                if (url != null) {
                    LOG.info("Found groovity properties resource " + url);
                    builder.setPropsUrl(url);
                    try (InputStream configStream = url.openStream()) {
                        configProperties.load(configStream);
                    }
                } else {
                    File file = new File(propsFile);
                    if (file.exists()) {
                        LOG.info("Found groovity properties file " + file.getAbsolutePath());
                        builder.setPropsFile(file);
                        if (!file.isDirectory()) {
                            try (InputStream configStream = new FileInputStream(file)) {
                                configProperties.load(configStream);
                            }
                        }
                    } else {
                        LOG.warning("Groovity properties file " + propsFile + " not found");
                    }
                }
            } else {
                URL url = config.getServletContext().getClassLoader().getResource("groovity.properties");
                if (url != null) {
                    LOG.info("Found groovity.properties on classpath");
                    builder.setPropsUrl(url);
                    try (InputStream configStream = url.openStream()) {
                        configProperties.load(configStream);
                    }
                }
            }
            if (configProperties.containsKey(IGNORE_STATUS_CODES) && !System.getProperties().containsKey(IGNORE_STATUS_CODES)) {
                System.setProperty(IGNORE_STATUS_CODES, configProperties.getProperty(IGNORE_STATUS_CODES));
            }
            if (configProperties.containsKey(ERROR_PAGE) && !System.getProperties().containsKey(ERROR_PAGE)) {
                System.setProperty(ERROR_PAGE, configProperties.getProperty(ERROR_PAGE));
            }
            String async = getParam(ASYNC_THREADS_PARAM);
            if (isNotBlank(async)) {
                builder.setAsyncThreads(Integer.parseInt(async));
            }
            String caseSens = getParam(CASE_SENSITIVE_PARAM);
            if (isNotBlank(caseSens)) {
                builder.setCaseSensitive(Boolean.parseBoolean(caseSens));
            }
            String maxPerRoute = getParam(MAX_CONN_PER_ROUTE_PARAM);
            if (isNotBlank(maxPerRoute)) {
                builder.setMaxHttpConnPerRoute(Integer.parseInt(maxPerRoute));
            }
            String maxTotal = getParam(MAX_CONN_TOTAL_PARAM);
            if (isNotBlank(maxTotal)) {
                builder.setMaxHttpConnTotal(Integer.parseInt(maxTotal));
            }
            File jarDirectory;
            String jarDir = getParam(JAR_DIRECTORY_PARAM);
            if (isNotBlank(jarDir)) {
                jarDirectory = new File(jarDir);
            } else {
                // default jar directory;
                jarDirectory = new File(getServletContext().getRealPath("/"), JAR_DIRECTORY_PARAM_DEFAULT_VALUE);
            }
            builder.setJarDirectory(jarDirectory);
            String jarPhase = getParam(JAR_PHASES_PARAM);
            if (isNotBlank(jarPhase)) {
                builder.setJarPhase(jarPhase);
            }
            String scriptBase = getParam(SCRIPT_BASE_CLASS_PARAM);
            if (isNotBlank(scriptBase)) {
                builder.setScriptBaseClass(scriptBase);
            }
            String defaultBinding = getParam(DEFAULT_BINDING);
            if (isNotBlank(defaultBinding)) {
                @SuppressWarnings("unchecked") Map<String, Object> db = (Map<String, Object>) new JsonSlurper().parse(new StringReader(defaultBinding));
                builder.setDefaultBinding(db);
            }
            String sourcePhase = getParam(SOURCE_PHASES_PARAM);
            if (isNotBlank(sourcePhase)) {
                builder.setSourcePhase(sourcePhase);
            }
            String sourcePoll = getParam(SOURCE_POLL_SECONDS);
            if (isNotBlank(sourcePoll)) {
                builder.setSourcePollSeconds(Integer.parseInt(sourcePoll));
            }
            String configurator = getParam(CONFIGURATOR);
            if (isNotBlank(configurator)) {
                builder.setConfigurator((Configurator) loadInstance(configurator));
            }
            String shutdown = getParam(SHUTDOWN_HANDLER);
            if (isNotBlank(shutdown)) {
                shutdownHandler = (Runnable) loadInstance(shutdown);
            }
            String hostnameVerifier = getParam(HOSTNAME_VERIFIER);
            if (isNotBlank(hostnameVerifier)) {
                builder.getHttpClientBuilder().setSSLHostnameVerifier((HostnameVerifier) loadInstance(hostnameVerifier));
            }
            String trustStrategy = getParam(TRUST_STRATEGY);
            if (isNotBlank(trustStrategy)) {
                SSLContextBuilder sslb = new SSLContextBuilder();
                sslb.loadTrustMaterial((TrustStrategy) loadInstance(trustStrategy));
                builder.getHttpClientBuilder().setSSLContext(sslb.build());
            }
            String sourceLocation = getParam(SOURCE_LOCATION_PARAM);
            String sourceLocator = getParam(SOURCE_LOCATOR_PARAM);
            if (isNotBlank(sourceLocation)) {
                // newlines separate multiple
                String[] sources = sourceLocation.split(SOURCE_LOCATOR_SPLIT_REGEX);
                ArrayList<URI> sourceURIs = new ArrayList<URI>(sources.length);
                for (String source : sources) {
                    if (isNotBlank(source)) {
                        sourceURIs.add(new URI(source));
                    }
                }
                builder.setSourceLocations(sourceURIs);
            } else if (isNotBlank(sourceLocator)) {
                String[] sources = sourceLocator.split(SOURCE_LOCATOR_SPLIT_REGEX);
                ArrayList<GroovitySourceLocator> sourceLocators = new ArrayList<GroovitySourceLocator>(sources.length);
                for (String source : sources) {
                    if (isNotBlank(source)) {
                        sourceLocators.add((GroovitySourceLocator) loadInstance(source));
                    }
                }
                builder.setSourceLocators(sourceLocators);
            }
            // we want to allow unconfigured groovities to run, presuming there are embedded
            // groovity classes
            BindingDecorator userDecorator = null;
            String userDecoratorClass = getParam(BINDING_DECORATOR);
            if (isNotBlank(userDecoratorClass)) {
                userDecorator = (BindingDecorator) loadInstance(userDecoratorClass);
            }
            builder.setBindingDecorator(new BindingDecorator(userDecorator) {

                @Override
                public void decorate(Map<String, Object> binding) {
                    binding.put("servletContext", GroovityServlet.this.getServletContext());
                }
            });
            builder.setArgsLookup(new ArgsLookup(new RequestArgsLookup()));
            GroovityErrorHandlerChain errorHandlers = GroovityErrorHandlerChain.createDefault();
            String chainDecorator = getParam(ERROR_CHAIN_DECORATOR);
            if (isNotBlank(chainDecorator)) {
                ((GroovityErrorHandlerChainDecorator) loadInstance(chainDecorator)).decorate(errorHandlers);
            }
            ServiceLoader.load(GroovityErrorHandlerChainDecorator.class).forEach(decorator -> {
                decorator.decorate(errorHandlers);
            });
            Groovity groovity = builder.build();
            groovityScriptViewFactory = new GroovityScriptViewFactory();
            groovityScriptViewFactory.setGroovity(groovity);
            groovityScriptViewFactory.setServletContext(getServletContext());
            groovityScriptViewFactory.setErrorHandlers(errorHandlers);
            groovityScriptViewFactory.init();
            config.getServletContext().setAttribute(SERVLET_CONTEXT_GROOVITY_VIEW_FACTORY, groovityScriptViewFactory);
            config.getServletContext().setAttribute(SERVLET_CONTEXT_GROOVITY_INSTANCE, groovity);
        }
        javax.websocket.server.ServerContainer webSocketServer = (javax.websocket.server.ServerContainer) config.getServletContext().getAttribute("javax.websocket.server.ServerContainer");
        if (webSocketServer != null) {
            // register websocket endpoint
            webSocketServer.addEndpoint(ServerEndpointConfig.Builder.create(GroovityServerEndpoint.class, "/ws/{socketName}").configurator(new GroovityServerEndpoint.Configurator(groovityScriptViewFactory)).build());
            LOG.info("Created groovity web socket endpoint");
        }
        LOG.info("Completed initialization of GroovityServlet");
    } catch (Exception e) {
        throw new ServletException(e);
    }
}
Also used : ArrayList(java.util.ArrayList) Properties(java.util.Properties) URI(java.net.URI) URL(java.net.URL) ServletException(javax.servlet.ServletException) GroovityBuilder(com.disney.groovity.GroovityBuilder) Groovity(com.disney.groovity.Groovity) StringReader(java.io.StringReader) SSLContextBuilder(org.apache.http.ssl.SSLContextBuilder) JsonSlurper(groovy.json.JsonSlurper) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) GroovityErrorHandlerChain(com.disney.groovity.servlet.error.GroovityErrorHandlerChain) ServletConfig(javax.servlet.ServletConfig) FileInputStream(java.io.FileInputStream) ServletException(javax.servlet.ServletException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) IOException(java.io.IOException) ArgsLookup(com.disney.groovity.ArgsLookup) GroovitySourceLocator(com.disney.groovity.source.GroovitySourceLocator) GroovityErrorHandlerChainDecorator(com.disney.groovity.servlet.error.GroovityErrorHandlerChainDecorator) BindingDecorator(com.disney.groovity.BindingDecorator) File(java.io.File) Map(java.util.Map)

Example 12 with JsonSlurper

use of groovy.json.JsonSlurper in project groovity by disney.

the class Model method readExternal.

@SuppressWarnings("unchecked")
public default void readExternal(ObjectInput oi) throws IOException {
    String json = oi.readUTF();
    Object data = new JsonSlurper().parseText(json);
    if (data instanceof Collection) {
        ((Collection<Object>) this).addAll((Collection<Object>) data);
    } else {
        putAll((Map<String, Object>) data);
    }
}
Also used : JsonSlurper(groovy.json.JsonSlurper) Collection(java.util.Collection)

Example 13 with JsonSlurper

use of groovy.json.JsonSlurper in project pact-jvm by DiUS.

the class ArrayContainsExampleTest method testArticles.

@Test
@PactTestFor
void testArticles(MockServer mockServer) throws IOException {
    final String response = Request.get(mockServer.getUrl() + "/orders").addHeader("Accept", "application/vnd.siren+json").execute().returnContent().asString(Charset.defaultCharset());
    final Map<String, Object> jsonResponse = (Map<String, Object>) new JsonSlurper().parseText(response);
    assertThat(jsonResponse.keySet(), is(equalTo(Set.of("class", "entities", "links"))));
    List entities = (List) jsonResponse.get("entities");
    assertThat(entities.size(), is(1));
    Map<String, Object> entity = (Map<String, Object>) entities.get(0);
    assertThat(entity.keySet(), is(equalTo(Set.of("rel", "links", "class", "actions", "properties"))));
    List<Map<String, Object>> actions = (List<Map<String, Object>>) entity.get("actions");
    assertThat(actions.size(), is(2));
    for (Map<String, Object> action : actions) {
        assertThat(action.keySet(), is(equalTo(Set.of("method", "name", "href"))));
    }
}
Also used : JsonSlurper(groovy.json.JsonSlurper) List(java.util.List) Map(java.util.Map) Test(org.junit.jupiter.api.Test)

Example 14 with JsonSlurper

use of groovy.json.JsonSlurper in project pact-jvm by DiUS.

the class ArrayContainsExampleTest method exampleWithArrayContains.

@Test
@PactVerification
public void exampleWithArrayContains() throws IOException {
    final String response = Request.get(provider.getUrl() + "/orders").addHeader("Accept", "application/vnd.siren+json").execute().returnContent().asString();
    final Map<String, Object> jsonResponse = (Map<String, Object>) new JsonSlurper().parseText(response);
    assertThat(jsonResponse.keySet(), is(equalTo(Set.of("class", "entities", "links"))));
    List entities = (List) jsonResponse.get("entities");
    assertThat(entities.size(), is(1));
    Map<String, Object> entity = (Map<String, Object>) entities.get(0);
    assertThat(entity.keySet(), is(equalTo(Set.of("rel", "links", "class", "actions", "properties"))));
    List<Map<String, Object>> actions = (List<Map<String, Object>>) entity.get("actions");
    assertThat(actions.size(), is(2));
    for (Map<String, Object> action : actions) {
        assertThat(action.keySet(), is(equalTo(Set.of("method", "name", "href"))));
    }
}
Also used : JsonSlurper(groovy.json.JsonSlurper) List(java.util.List) Map(java.util.Map) Test(org.junit.Test)

Aggregations

JsonSlurper (groovy.json.JsonSlurper)14 Map (java.util.Map)9 List (java.util.List)6 IOException (java.io.IOException)4 File (java.io.File)3 StringReader (java.io.StringReader)3 ArrayList (java.util.ArrayList)3 Test (org.junit.Test)3 DslPart (au.com.dius.pact.consumer.dsl.DslPart)2 PactDslJsonArray (au.com.dius.pact.consumer.dsl.PactDslJsonArray)2 RequestResponsePact (au.com.dius.pact.model.RequestResponsePact)2 XmlSlurper (groovy.util.XmlSlurper)2 GPathResult (groovy.util.slurpersupport.GPathResult)2 FileInputStream (java.io.FileInputStream)2 InputStream (java.io.InputStream)2 StringWriter (java.io.StringWriter)2 ArgsLookup (com.disney.groovity.ArgsLookup)1 BindingDecorator (com.disney.groovity.BindingDecorator)1 Groovity (com.disney.groovity.Groovity)1 GroovityBuilder (com.disney.groovity.GroovityBuilder)1