diff --git a/codegen-cli/pom.xml b/codegen-cli/pom.xml
index 4d27fd54a..5310002c8 100644
--- a/codegen-cli/pom.xml
+++ b/codegen-cli/pom.xml
@@ -50,14 +50,13 @@
com.networknt
light-graphql-4j-generator
-
- com.jsoniter
- jsoniter
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-yaml
- org.javassist
- javassist
+ com.fasterxml.jackson.core
+ jackson-databind
org.slf4j
diff --git a/codegen-cli/src/main/java/com/networknt/codegen/Cli.java b/codegen-cli/src/main/java/com/networknt/codegen/Cli.java
index 18d66a46d..c4320ebfa 100644
--- a/codegen-cli/src/main/java/com/networknt/codegen/Cli.java
+++ b/codegen-cli/src/main/java/com/networknt/codegen/Cli.java
@@ -3,15 +3,20 @@
import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParameterException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.fizzed.rocker.runtime.RockerRuntime;
-import com.jsoniter.JsonIterator;
-import com.jsoniter.any.Any;
-import com.networknt.codegen.rest.YAMLFileParameterizer;
+import com.networknt.utility.NioUtils;
+import org.apache.commons.lang3.StringUtils;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
+import java.util.Map;
import java.util.Set;
import static java.io.File.separator;
@@ -19,6 +24,12 @@
* Created by steve on 24/04/17.
*/
public class Cli {
+ private static final String JSON="json";
+ private static final String YAML="yaml";
+ private static final String YML="yml";
+ private static final String GRAPHQLS = "graphqls";
+
+ private ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
@Parameter(names={"--framework", "-f"}, required = true,
description = "The framework template to be used as scaffolding to the generated code.")
@@ -75,37 +86,58 @@ public void run(JCommander jCommander) throws Exception {
Set frameworks = registry.getFrameworks();
if(frameworks.contains(framework)) {
Generator generator = registry.getGenerator(framework);
- Object anyModel = null;
+ Object modelNode = null;
// model can be empty in some cases.
if(model != null) {
- // check if model is json or not before loading.
- if(model.endsWith("json")) {
- if(Utils.isUrl(model)) {
- anyModel = JsonIterator.deserialize(Utils.urlToByteArray(new URL(model)));
+ String ext = NioUtils.getFileExtension(model);
+ if(StringUtils.equalsIgnoreCase(ext, JSON)) {
+ if (Utils.isUrl(model)) {
+ modelNode = Generator.jsonMapper.readTree(Utils.urlToByteArray(new URL(model)));
} else {
- anyModel = JsonIterator.deserialize(Files.readAllBytes(Paths.get(model)));
+ modelNode = Generator.jsonMapper.readTree(Files.readAllBytes(Paths.get(model)));
}
- } else {
+ } else if(StringUtils.equalsIgnoreCase(ext, YML) || StringUtils.equalsIgnoreCase(ext, YAML)) {
+ if (Utils.isUrl(model)) {
+ modelNode = Generator.yamlMapper.readTree(Utils.urlToByteArray(new URL(model)));
+ } else {
+ modelNode = Generator.yamlMapper.readTree(Files.readAllBytes(Paths.get(model)));
+ }
+ } else if(StringUtils.equalsIgnoreCase(ext, GRAPHQLS)) {
if(Utils.isUrl(model)) {
- anyModel = new String(Utils.urlToByteArray(new URL(model)), StandardCharsets.UTF_8);
+ modelNode = new String(Utils.urlToByteArray(new URL(model)), StandardCharsets.UTF_8);
} else {
- anyModel = new String(Files.readAllBytes(Paths.get(model)), StandardCharsets.UTF_8);
+ modelNode = new String(Files.readAllBytes(Paths.get(model)), StandardCharsets.UTF_8);
}
+ } else {
+ throw new UnsupportedOperationException("Unknown model file format " + ext);
}
}
- Any anyConfig = null;
+ JsonNode configNode = null;
if(config != null) {
- if(Utils.isUrl(config)) {
- anyConfig = JsonIterator.deserialize(Utils.urlToByteArray(new URL(config)));
+ String ext = NioUtils.getFileExtension(config);
+ if (StringUtils.equalsIgnoreCase(ext, JSON)) {
+ if (Utils.isUrl(config)) {
+ configNode = Generator.jsonMapper.readTree(Utils.urlToByteArray(new URL(config)));
+ } else {
+ configNode = Generator.jsonMapper.readTree(Files.readAllBytes(Paths.get(config)));
+ }
+ } else if (StringUtils.equalsIgnoreCase(ext, YML)||StringUtils.equalsIgnoreCase(ext, YAML)) {
+ if (Utils.isUrl(config)) {
+ configNode = Generator.yamlMapper.readTree(Utils.urlToByteArray(new URL(config)));
+ } else {
+ configNode = Generator.yamlMapper.readTree(Files.readAllBytes(Paths.get(config)));
+ }
} else {
- anyConfig = JsonIterator.deserialize(Files.readAllBytes(Paths.get(config)));
+ throw new UnsupportedOperationException("Unknow file format " + ext);
}
+
}
if(parameterizationDir != null) {
- YAMLFileParameterizer.rewriteAll(parameterizationDir, output + separator + YAMLFileParameterizer.DEFAULT_DEST_DIR, anyConfig.asMap().get(YAMLFileParameterizer.GENERATE_ENV_VARS).asMap());
+ Map map = Generator.jsonMapper.convertValue(configNode.get(YAMLFileParameterizer.GENERATE_ENV_VARS), new TypeReference
- com.jsoniter
- jsoniter
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-yaml
- org.javassist
- javassist
+ com.fasterxml.jackson.core
+ jackson-databind
ch.qos.logback
diff --git a/codegen-core/src/main/java/com/networknt/codegen/Generator.java b/codegen-core/src/main/java/com/networknt/codegen/Generator.java
index d63bb3dbd..7e800d8fd 100644
--- a/codegen-core/src/main/java/com/networknt/codegen/Generator.java
+++ b/codegen-core/src/main/java/com/networknt/codegen/Generator.java
@@ -13,9 +13,12 @@
import java.util.HashMap;
import java.util.Map;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.fizzed.rocker.runtime.ArrayOfByteArraysOutput;
import com.fizzed.rocker.runtime.DefaultRockerModel;
-import com.jsoniter.any.Any;
import org.apache.commons.io.IOUtils;
@@ -28,19 +31,22 @@
* @author Steve Hu
*/
public interface Generator {
-
+ // Jackson ObjectMapper with YAML support.
+ public static ObjectMapper yamlMapper = new ObjectMapper(new YAMLFactory());
+ public static ObjectMapper jsonMapper = new ObjectMapper();
// config schema cache
Map schemaMap = new HashMap<>();
/**
- * Generate the project based on the input parameters.
+ * Generate the project based on the input parameters. For most frameworks, the model can be converted to JSON, but
+ * the GraphQL is using a schema file that can only be passed in as a string. This is why, the model is an Object.
*
* @param targetPath The output directory of the generated project
* @param model The optional model data that trigger the generation, i.e. swagger specification, graphql IDL etc.
* @param config A json object that controls how the generator behaves.
* @throws IOException throws IOException
*/
- void generate(String targetPath, Object model, Any config) throws IOException;
+ void generate(String targetPath, Object model, JsonNode config) throws IOException;
/**
* Get generator name
@@ -171,4 +177,314 @@ static void copyFile(final InputStream is, final java.nio.file.Path folder) thro
Files.copy(is, folder, StandardCopyOption.REPLACE_EXISTING);
}
+ default String getRootPackage(JsonNode config, String defaultValue) {
+ String rootPackage = defaultValue == null ? "com.networknt.app" : defaultValue;
+ JsonNode jsonNode = config.get("rootPackage");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("rootPackage", rootPackage);
+ } else {
+ rootPackage = jsonNode.textValue();
+ }
+ return rootPackage;
+ }
+
+ default String getModelPackage(JsonNode config, String defaultValue) {
+ String rootPackage = getRootPackage(config, null);
+ String modelPackage = defaultValue == null ? rootPackage + ".model" : defaultValue;
+ JsonNode jsonNode = config.get("modelPackage");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("modelPackage", modelPackage);
+ } else {
+ modelPackage = jsonNode.textValue();
+ }
+ return modelPackage;
+ }
+
+ default String getHandlerPackage(JsonNode config, String defaultValue) {
+ String rootPackage = getRootPackage(config, null);
+ String handlerPackage = defaultValue == null ? rootPackage + ".handler" : defaultValue;
+ JsonNode jsonNode = config.get("handlerPackage");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("handlerPackage", handlerPackage);
+ } else {
+ handlerPackage = jsonNode.textValue();
+ }
+ return handlerPackage;
+ }
+
+ default boolean isOverwriteHandler(JsonNode config, Boolean defaultValue) {
+ boolean overwriteHandler = defaultValue == null ? true : defaultValue;
+ JsonNode jsonNode = config.get("overwriteHandler");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("overwriteHandler", overwriteHandler);
+ } else {
+ overwriteHandler = jsonNode.booleanValue();
+ }
+ return overwriteHandler;
+ }
+
+ default boolean isOverwriteHandlerTest(JsonNode config, Boolean defaultValue) {
+ boolean overwriteHandlerTest = defaultValue == null ? true : defaultValue;
+ JsonNode jsonNode = config.get("overwriteHandlerTest");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("overwriteHandlerTest", overwriteHandlerTest);
+ } else {
+ overwriteHandlerTest = jsonNode.booleanValue();
+ }
+ return overwriteHandlerTest;
+ }
+
+ default boolean isOverwriteModel(JsonNode config, Boolean defaultValue) {
+ boolean overwriteModel = defaultValue == null ? true : defaultValue;
+ JsonNode jsonNode = config.get("overwriteModel");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("overwriteModel", overwriteModel);
+ } else {
+ overwriteModel = jsonNode.booleanValue();
+ }
+ return overwriteModel;
+ }
+
+ default boolean isGenerateModelOnly(JsonNode config, Boolean defaultValue) {
+ boolean generateModelOnly = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("generateModelOnly");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("generateModelOnly", generateModelOnly);
+ } else {
+ generateModelOnly = jsonNode.booleanValue();
+ }
+ return generateModelOnly;
+ }
+
+ default boolean isEnableHttp(JsonNode config, Boolean defaultValue) {
+ boolean enableHttp = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("enableHttp");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("enableHttp", enableHttp);
+ } else {
+ enableHttp = jsonNode.booleanValue();
+ }
+ return enableHttp;
+ }
+
+ default String getHttpPort(JsonNode config, String defaultValue) {
+ String httpPort = defaultValue == null ? "8080" : defaultValue;
+ JsonNode jsonNode = config.get("httpPort");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("httpPort", httpPort);
+ } else {
+ httpPort = jsonNode.asText();
+ }
+ return httpPort;
+ }
+
+ default boolean isEnableHttps(JsonNode config, Boolean defaultValue) {
+ boolean enableHttps = defaultValue == null ? true : defaultValue;
+ JsonNode jsonNode = config.get("enableHttps");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("enableHttps", enableHttps);
+ } else {
+ enableHttps = jsonNode.booleanValue();
+ }
+ return enableHttps;
+ }
+
+ default boolean isEnableHttp2(JsonNode config, Boolean defaultValue) {
+ boolean enableHttp2 = defaultValue == null ? true : defaultValue;
+ JsonNode jsonNode = config.get("enableHttp2");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("enableHttp2", enableHttp2);
+ } else {
+ enableHttp2 = jsonNode.booleanValue();
+ }
+ return enableHttp2;
+ }
+
+ default String getHttpsPort(JsonNode config, String defaultValue) {
+ String httpsPort = defaultValue == null ? "8443" : defaultValue;
+ JsonNode jsonNode = config.get("httpsPort");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("httpsPort", httpsPort);
+ } else {
+ httpsPort = jsonNode.asText();
+ }
+ return httpsPort;
+ }
+
+ default boolean isEnableRegistry(JsonNode config, Boolean defaultValue) {
+ boolean enableRegistry = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("enableRegistry");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("enableRegistry", enableRegistry);
+ } else {
+ enableRegistry = jsonNode.booleanValue();
+ }
+ return enableRegistry;
+ }
+
+ default boolean isEclipseIDE(JsonNode config, Boolean defaultValue) {
+ boolean eclipseIDE = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("eclipseIDE");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("eclipseIDE", eclipseIDE);
+ } else {
+ eclipseIDE = jsonNode.booleanValue();
+ }
+ return eclipseIDE;
+ }
+
+ default boolean isSupportClient(JsonNode config, Boolean defaultValue) {
+ boolean supportClient = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("supportClient");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("supportClient", supportClient);
+ } else {
+ supportClient = jsonNode.booleanValue();
+ }
+ return supportClient;
+ }
+
+ default boolean isPrometheusMetrics(JsonNode config, Boolean defaultValue) {
+ boolean prometheusMetrics = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("prometheusMetrics");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("prometheusMetrics", prometheusMetrics);
+ } else {
+ prometheusMetrics = jsonNode.booleanValue();
+ }
+ return prometheusMetrics;
+ }
+
+ default String getDockerOrganization(JsonNode config, String defaultValue) {
+ String dockerOrganization = defaultValue == null ? "networknt" : defaultValue;
+ JsonNode jsonNode = config.get("dockerOrganization");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("dockerOrganization", dockerOrganization);
+ } else {
+ dockerOrganization = jsonNode.textValue();
+ }
+ return dockerOrganization;
+ }
+
+ default String getVersion(JsonNode config, String defaultValue) {
+ String version = defaultValue == null ? "1.0.0" : defaultValue;
+ JsonNode jsonNode = config.get("version");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("version", version);
+ } else {
+ version = jsonNode.textValue();
+ }
+ return version;
+ }
+
+ default String getGroupId(JsonNode config, String defaultValue) {
+ String groupId = defaultValue == null ? "com.networknt" : defaultValue;
+ JsonNode jsonNode = config.get("groupId");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("groupId", groupId);
+ } else {
+ groupId = jsonNode.textValue();
+ }
+ return groupId;
+ }
+
+ default String getArtifactId(JsonNode config, String defaultValue) {
+ String artifactId = defaultValue == null ? "app" : defaultValue;
+ JsonNode jsonNode = config.get("artifactId");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("artifactId", artifactId);
+ } else {
+ artifactId = jsonNode.textValue();
+ }
+ return artifactId;
+ }
+
+ default boolean isSpecChangeCodeReGenOnly(JsonNode config, Boolean defaultValue) {
+ boolean specChangeCodeReGenOnly = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("specChangeCodeReGenOnly");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("specChangeCodeReGenOnly", specChangeCodeReGenOnly);
+ } else {
+ specChangeCodeReGenOnly = jsonNode.booleanValue();
+ }
+ return specChangeCodeReGenOnly;
+ }
+
+ default boolean isEnableParamDescription(JsonNode config, Boolean defaultValue) {
+ boolean enableParamDescription = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("enableParamDescription");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("enableParamDescription", enableParamDescription);
+ } else {
+ enableParamDescription = jsonNode.booleanValue();
+ }
+ return enableParamDescription;
+ }
+
+ default boolean isSkipPomFile(JsonNode config, Boolean defaultValue) {
+ boolean skipPomFile = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("skipPomFile");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("skipPomFile", skipPomFile);
+ } else {
+ skipPomFile = jsonNode.booleanValue();
+ }
+ return skipPomFile;
+ }
+
+ default boolean isKafkaProducer(JsonNode config, Boolean defaultValue) {
+ boolean kafkaProducer = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("kafkaProducer");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("kafkaProducer", kafkaProducer);
+ } else {
+ kafkaProducer = jsonNode.booleanValue();
+ }
+ return kafkaProducer;
+ }
+
+ default boolean isKafkaConsumer(JsonNode config, Boolean defaultValue) {
+ boolean kafkaConsumer = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("kafkaConsumer");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("kafkaConsumer", kafkaConsumer);
+ } else {
+ kafkaConsumer = jsonNode.booleanValue();
+ }
+ return kafkaConsumer;
+ }
+
+ default boolean isSupportAvro(JsonNode config, Boolean defaultValue) {
+ boolean supportAvro = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("supportAvro");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("supportAvro", supportAvro);
+ } else {
+ supportAvro = jsonNode.booleanValue();
+ }
+ return supportAvro;
+ }
+
+ default String getKafkaTopic(JsonNode config, String defaultValue) {
+ String kafkaTopic = defaultValue == null ? "event" : defaultValue;
+ JsonNode jsonNode = config.get("kafkaTopic");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("kafkaTopic", kafkaTopic);
+ } else {
+ kafkaTopic = jsonNode.textValue();
+ }
+ return kafkaTopic;
+ }
+
+ default String getDecryptOption(JsonNode config, String defaultValue) {
+ String decryptOption = defaultValue == null ? "default" : defaultValue;
+ JsonNode jsonNode = config.get("decryptOption");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("decryptOption", decryptOption);
+ } else {
+ decryptOption = jsonNode.textValue();
+ }
+ return decryptOption;
+ }
+
}
diff --git a/codegen-core/src/test/java/com/networknt/codegen/JsonDefaultTest.java b/codegen-core/src/test/java/com/networknt/codegen/JsonDefaultTest.java
new file mode 100644
index 000000000..350d01716
--- /dev/null
+++ b/codegen-core/src/test/java/com/networknt/codegen/JsonDefaultTest.java
@@ -0,0 +1,17 @@
+package com.networknt.codegen;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.junit.Test;
+
+public class JsonDefaultTest {
+ String s = "{\"enabled\":true,\"level\":5,\"name\":\"steve\"}";
+
+ @Test
+ public void testBooleanDefault() throws Exception {
+ JsonNode node = Generator.jsonMapper.readTree(s);
+ ((ObjectNode)node).put("useData", true);
+ boolean b = node.get("useData").booleanValue();
+ System.out.println(b);
+ }
+}
diff --git a/codegen-core/src/test/java/com/networknt/codegen/JsonIterTest.java b/codegen-core/src/test/java/com/networknt/codegen/JsonIterTest.java
deleted file mode 100644
index af7fdd88b..000000000
--- a/codegen-core/src/test/java/com/networknt/codegen/JsonIterTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.networknt.codegen;
-
-import com.jsoniter.any.Any;
-import org.junit.Test;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Created by steve on 09/07/17.
- */
-public class JsonIterTest {
- private static Map mapOf(Object... args) {
- HashMap map = new HashMap();
- for (int i = 0; i < args.length; i += 2) {
- map.put((String) args[i], args[i + 1]);
- }
- return map;
- }
-
- @Test
- public void testMapSize() {
- Any any = Any.wrap(mapOf("hello", 1, "world", 2));
- assertEquals(2, any.size());
- }
-
- @Test
- public void testListSize() {
- Any any = Any.wrap(Arrays.asList(1, 2, 3));
- assertEquals(3, any.size());
- }
-
- @Test
- public void testArraySize() {
- Any any = Any.wrap(new int[]{1, 2, 3});
- assertEquals(3, any.size());
- }
-
- @Test
- public void testGetNestedMapLevel1() {
- Any any = Any.wrap(mapOf("a", mapOf("b", "c"), "d", mapOf("e", "f")));
- assertEquals("c", any.get("a", "b").toString());
- // if using * it must be single quoted.
- assertEquals("{\"a\":\"c\"}", any.get('*', "b").toString());
- }
-
- @Test
- public void testGetNestedMapLevel2() {
- Any any = Any.wrap(mapOf("a", mapOf("b", mapOf("c", "d")), "e", mapOf("f", mapOf("g", "h"))));
- System.out.println("any = " + any.toString());
- assertEquals("d", any.get("a", "b", "c").toString());
- String s = any.get('*', "b").toString();
- assertEquals("{\"a\":{\"c\":\"d\"}}", s);
- s = any.get('*', "b", "c").toString();
- assertEquals("{\"a\":\"d\"}", s);
- s = any.get('*', '*', "f").toString();
- System.out.println("s = " + s);
- assertEquals("{\"a\":{},\"e\":{}}", s);
-
- }
-
- @Test
- public void testGetNestedListLevel1() {
- Any any = Any.wrap(Arrays.asList(Arrays.asList("hello"), Arrays.asList("world")));
- System.out.println("any = " + any.toString());
-
- assertEquals("hello", any.get(0, 0).toString());
- assertEquals("[\"hello\",\"world\"]", any.get('*', 0).toString());
- }
-
- @Test
- public void testGetNestedListLevel2() {
- Any any = Any.wrap(Arrays.asList(Arrays.asList(Arrays.asList("hello")), Arrays.asList(Arrays.asList("world"))));
- System.out.println("any = " + any.toString());
- assertEquals("hello", any.get(0, 0, 0).toString());
- assertEquals("[\"hello\",\"world\"]", any.get('*', 0, 0).toString());
- }
-
- @Test
- public void testGetListOfMaps() {
- Any any = Any.wrap(Arrays.asList(Arrays.asList(Arrays.asList(mapOf("hello", "world")))));
- System.out.println("any = " + any.toString());
- assertEquals("world", any.get(0, 0, 0, "hello").toString());
- String s = any.get(0, 0, 0).toString();
- System.out.println("s = " + s);
- assertEquals("{\"hello\":\"world\"}", s);
- }
-
- @Test
- public void testGetMapOfLists() {
- Any any = Any.wrap(mapOf("a", Arrays.asList(Arrays.asList(Arrays.asList(mapOf("hello", "world"))))));
- System.out.println("any = " + any.toString());
- assertEquals("world", any.get("a", 0, 0, 0, "hello").toString());
- String s = any.get("a", 0, 0, 0).toString();
- System.out.println("s = " + s);
- assertEquals("{\"hello\":\"world\"}", s);
- }
-
-}
diff --git a/codegen-fwk/src/test/resources/config/service.yml b/codegen-fwk/src/test/resources/config/service.yml
index 49cf844ed..003a153c7 100644
--- a/codegen-fwk/src/test/resources/config/service.yml
+++ b/codegen-fwk/src/test/resources/config/service.yml
@@ -2,8 +2,8 @@
singletons:
# Generator interface implementations
- com.networknt.codegen.Generator:
- - com.networknt.codegen.rest.OpenApiGenerator
- - com.networknt.codegen.hybrid.HybridServerGenerator
- - com.networknt.codegen.hybrid.HybridServiceGenerator
+ # - com.networknt.codegen.rest.OpenApiGenerator
+ # - com.networknt.codegen.hybrid.HybridServerGenerator
+ # - com.networknt.codegen.hybrid.HybridServiceGenerator
- com.networknt.codegen.graphql.GraphqlGenerator
- - com.networknt.codegen.rest.OpenApiKotlinGenerator
+ # - com.networknt.codegen.rest.OpenApiKotlinGenerator
diff --git a/codegen-web/src/main/java/com/networknt/codegen/handler/CodegenMultipleHandler.java b/codegen-web/src/main/java/com/networknt/codegen/handler/CodegenMultipleHandler.java
index efe576577..4060a62fb 100644
--- a/codegen-web/src/main/java/com/networknt/codegen/handler/CodegenMultipleHandler.java
+++ b/codegen-web/src/main/java/com/networknt/codegen/handler/CodegenMultipleHandler.java
@@ -1,12 +1,13 @@
package com.networknt.codegen.handler;
-import com.jsoniter.JsonIterator;
-import com.jsoniter.any.Any;
+import com.fasterxml.jackson.databind.JsonNode;
import com.networknt.codegen.CodegenWebConfig;
import com.networknt.codegen.FrameworkRegistry;
import com.networknt.codegen.Generator;
import com.networknt.codegen.Utils;
+import com.networknt.codegen.graphql.GraphqlGenerator;
import com.networknt.config.Config;
+import com.networknt.config.JsonMapper;
import com.networknt.rpc.Handler;
import com.networknt.rpc.router.JsonHandler;
import com.networknt.rpc.router.ServiceHandler;
@@ -71,16 +72,20 @@ public ByteBuffer handle(HttpServerExchange exchange, Object input) {
return NioUtils.toByteBuffer(getStatus(exchange, STATUS_INVALID_FRAMEWORK, framework));
}
String modelType = (String)generatorMap.get("modelType");
- Object model = null; // the model can be Any or String depending on the framework
+ Object model = null; // the model can be JsonNode or String depending on the framework
if("C".equals(modelType)) {
String modelText = (String)generatorMap.get("modelText");
- // json or yaml?
- modelText = modelText.trim();
- if(modelText.startsWith("{") || modelText.startsWith("[")) {
- // This is a json string.
- model = JsonIterator.deserialize(modelText);
- } else {
+ if(GraphqlGenerator.FRAMEWORK.equals(framework)) {
model = modelText;
+ } else {
+ // json or yaml?
+ if(modelText.startsWith("{") || modelText.startsWith("[")) {
+ // This is a json string.
+ model = Generator.jsonMapper.readTree(modelText);
+ } else {
+ // This is a yaml string
+ model = Generator.yamlMapper.readTree(modelText);
+ }
}
} else if("U".equals(modelType)) {
String modelUrl = (String)generatorMap.get("modelUrl");
@@ -88,7 +93,9 @@ public ByteBuffer handle(HttpServerExchange exchange, Object input) {
if(Utils.isUrl(modelUrl)) {
// if it is a json file.
if(modelUrl.endsWith(".json")) {
- model = JsonIterator.deserialize(Utils.urlToByteArray(new URL(modelUrl)));
+ model = Generator.jsonMapper.readTree((Utils.urlToByteArray(new URL(modelUrl))));
+ } else if (modelUrl.endsWith(".yml") || modelUrl.endsWith(".yaml")) {
+ model = Generator.yamlMapper.readTree(Utils.urlToByteArray(new URL(modelUrl)));
} else {
model = new String(Utils.urlToByteArray(new URL(modelUrl)), StandardCharsets.UTF_8);
}
@@ -99,29 +106,29 @@ public ByteBuffer handle(HttpServerExchange exchange, Object input) {
}
String configType = (String)generatorMap.get("configType");
- Any config = null;
+ JsonNode config = null;
if("C".equals(configType)) {
String configText = (String)generatorMap.get("configText");
configText = configText.trim();
// the config must be json.
if(configText.startsWith("{") || configText.startsWith("[")) {
- config = JsonIterator.deserialize(configText);
+ config = Generator.jsonMapper.readTree(configText);
} else {
- return NioUtils.toByteBuffer(getStatus(exchange, STATUS_INVALID_CONFIG_JSON));
+ config = Generator.yamlMapper.readTree(configText);
}
} else if("U".equals(configType)) {
String configUrl = (String)generatorMap.get("configUrl");
configUrl = configUrl.trim();
- // make sure that the file extension is .json
if(configUrl.endsWith(".json")) {
- config = JsonIterator.deserialize(Utils.urlToByteArray(new URL(configUrl)));
+ config = Generator.jsonMapper.readTree(Utils.urlToByteArray(new URL(configUrl)));
+ } else if(configUrl.endsWith(".yml") || configUrl.endsWith(".yaml")) {
+ config = Generator.yamlMapper.readTree(Utils.urlToByteArray(new URL(configUrl)));
} else {
return NioUtils.toByteBuffer(getStatus(exchange, STATUS_INVALID_CONFIG_URL_EXTENSION, configUrl));
}
}
-
Generator generator = FrameworkRegistry.getInstance().getGenerator(framework);
- generator.generate(projectFolder, model, Any.wrap(config));
+ generator.generate(projectFolder, model, config);
}
} catch (Exception e) {
logger.error("Exception:", e);
diff --git a/codegen-web/src/main/java/com/networknt/codegen/handler/CodegenSingleHandler.java b/codegen-web/src/main/java/com/networknt/codegen/handler/CodegenSingleHandler.java
index ac05e44d4..d4aa1ed50 100644
--- a/codegen-web/src/main/java/com/networknt/codegen/handler/CodegenSingleHandler.java
+++ b/codegen-web/src/main/java/com/networknt/codegen/handler/CodegenSingleHandler.java
@@ -1,11 +1,11 @@
package com.networknt.codegen.handler;
-import com.jsoniter.JsonIterator;
-import com.jsoniter.any.Any;
+import com.fasterxml.jackson.databind.JsonNode;
import com.networknt.codegen.CodegenWebConfig;
import com.networknt.codegen.FrameworkRegistry;
import com.networknt.codegen.Generator;
import com.networknt.codegen.Utils;
+import com.networknt.codegen.graphql.GraphqlGenerator;
import com.networknt.config.Config;
import com.networknt.config.JsonMapper;
import com.networknt.rpc.Handler;
@@ -75,12 +75,18 @@ public ByteBuffer handle(HttpServerExchange exchange, Object input) {
if("C".equals(modelType)) {
String modelText = (String)generatorMap.get("modelText");
modelText = modelText.trim();
- // json or yaml?
- if(modelText.startsWith("{") || modelText.startsWith("[")) {
- // This is a json string.
- model = JsonIterator.deserialize(modelText);
- } else {
+ // based on the framework, we decide the format.
+ if(GraphqlGenerator.FRAMEWORK.equals(framework)) {
model = modelText;
+ } else {
+ // json or yaml?
+ if(modelText.startsWith("{") || modelText.startsWith("[")) {
+ // This is a json string.
+ model = Generator.jsonMapper.readTree(modelText);
+ } else {
+ // This is a yaml string
+ model = Generator.yamlMapper.readTree(modelText);
+ }
}
} else if("U".equals(modelType)) {
String modelUrl = (String)generatorMap.get("modelUrl");
@@ -88,7 +94,9 @@ public ByteBuffer handle(HttpServerExchange exchange, Object input) {
if(Utils.isUrl(modelUrl)) {
// if it is a json file.
if(modelUrl.endsWith(".json")) {
- model = JsonIterator.deserialize(Utils.urlToByteArray(new URL(modelUrl)));
+ model = Generator.jsonMapper.readTree(Utils.urlToByteArray(new URL(modelUrl)));
+ } else if (modelUrl.endsWith(".yml") || modelUrl.endsWith(".yaml")) {
+ model = Generator.yamlMapper.readTree(Utils.urlToByteArray(new URL(modelUrl)));
} else {
model = new String(Utils.urlToByteArray(new URL(modelUrl)), StandardCharsets.UTF_8);
}
@@ -98,29 +106,31 @@ public ByteBuffer handle(HttpServerExchange exchange, Object input) {
}
String configType = (String)generatorMap.get("configType");
- Any config = null;
+ JsonNode config = null;
if("C".equals(configType)) {
String configText = (String)generatorMap.get("configText");
configText = configText.trim();
// the config must be json.
if(configText.startsWith("{") || configText.startsWith("[")) {
- config = JsonIterator.deserialize(configText);
+ config = Generator.jsonMapper.readTree(configText);
} else {
- return NioUtils.toByteBuffer(getStatus(exchange, STATUS_INVALID_CONFIG_JSON));
+ config = Generator.yamlMapper.readTree(configText);
}
} else if("U".equals(configType)) {
String configUrl = (String)generatorMap.get("configUrl");
configUrl = configUrl.trim();
// make sure that the file extension is .json
if(configUrl.endsWith(".json")) {
- config = JsonIterator.deserialize(Utils.urlToByteArray(new URL(configUrl)));
+ config = Generator.jsonMapper.readTree(Utils.urlToByteArray(new URL(configUrl)));
+ } else if(configUrl.endsWith(".yml") || configUrl.endsWith(".yaml")) {
+ config = Generator.yamlMapper.readTree(Utils.urlToByteArray(new URL(configUrl)));
} else {
return NioUtils.toByteBuffer(getStatus(exchange, STATUS_INVALID_CONFIG_URL_EXTENSION, configUrl));
}
}
Generator generator = FrameworkRegistry.getInstance().getGenerator(framework);
- generator.generate(projectFolder, model, Any.wrap(config));
+ generator.generate(projectFolder, model, config);
} catch (Exception e) {
logger.error("Exception:", e);
diff --git a/codegen-web/src/main/resources/config/service.yml b/codegen-web/src/main/resources/config/service.yml
index 047b871c7..f7b24684e 100644
--- a/codegen-web/src/main/resources/config/service.yml
+++ b/codegen-web/src/main/resources/config/service.yml
@@ -14,7 +14,7 @@ singletons:
# Generator interface implementations
- com.networknt.codegen.Generator:
- - com.networknt.codegen.rest.OpenApiGenerator
+ - com.networknt.codegen.rest.OpenApiLightGenerator
- com.networknt.codegen.hybrid.HybridServerGenerator
- com.networknt.codegen.hybrid.HybridServiceGenerator
- com.networknt.codegen.graphql.GraphqlGenerator
diff --git a/light-graphql-4j/src/main/java/com/networknt/codegen/graphql/GraphqlGenerator.java b/light-graphql-4j/src/main/java/com/networknt/codegen/graphql/GraphqlGenerator.java
index a78b32736..e9a4b506d 100644
--- a/light-graphql-4j/src/main/java/com/networknt/codegen/graphql/GraphqlGenerator.java
+++ b/light-graphql-4j/src/main/java/com/networknt/codegen/graphql/GraphqlGenerator.java
@@ -1,21 +1,14 @@
package com.networknt.codegen.graphql;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.jsoniter.any.Any;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import com.networknt.codegen.Generator;
-import com.networknt.utility.NioUtils;
-import graphql.schema.GraphQLSchema;
-import graphql.schema.idl.RuntimeWiring;
-import graphql.schema.idl.SchemaGenerator;
-import graphql.schema.idl.SchemaParser;
-import graphql.schema.idl.TypeDefinitionRegistry;
-
-import java.io.File;
+import com.networknt.config.ConfigException;
+
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
-import java.util.Map;
import static java.io.File.separator;
@@ -23,35 +16,43 @@
* Created by steve on 01/05/17.
*/
public class GraphqlGenerator implements Generator {
- static ObjectMapper mapper = new ObjectMapper();
+ public static final String FRAMEWORK="light-graphql-4j";
@Override
public String getFramework() {
- return "light-graphql-4j";
+ return FRAMEWORK;
}
@Override
- public void generate(String targetPath, Object model, Any config) throws IOException {
- // whoever is calling this needs to make sure that model is converted to Map
- String schemaPackage = config.get("schemaPackage").toString();
- String schemaClass = config.get("schemaClass").toString();
- boolean overwriteSchemaClass = config.toBoolean("overwriteSchemaClass");
- boolean enableHttp = config.toBoolean("enableHttp");
- String httpPort = config.toString("httpPort");
- boolean enableHttps = config.toBoolean("enableHttps");
- String httpsPort = config.toString("httpsPort");
- boolean enableHttp2 = config.toBoolean("enableHttp2");
- boolean enableRegistry = config.toBoolean("enableRegistry");
- boolean eclipseIDE = config.toBoolean("eclipseIDE");
- boolean supportClient = config.toBoolean("supportClient");
- boolean prometheusMetrics = config.toBoolean("prometheusMetrics");
- boolean skipHealthCheck = config.toBoolean("skipHealthCheck");
- boolean skipServerInfo = config.toBoolean("skipServerInfo");
- String dockerOrganization = config.toString("dockerOrganization");
- String version = config.toString("version");
- String serviceId = config.get("groupId").toString().trim() + "." + config.get("artifactId").toString().trim() + "-" + config.get("version").toString().trim();
-
- if(dockerOrganization == null || dockerOrganization.length() == 0) dockerOrganization = "networknt";
+ public void generate(String targetPath, Object schema, JsonNode config) throws IOException {
+ // GraphQL specific config
+ String schemaPackage = getSchemaPackage(config, null);
+ String schemaClass = getSchemaClass(config, null);
+ boolean overwriteSchemaClass = isOverwriteSchemaClass(config, null);
+
+ // Generic config
+ boolean enableHttp = isEnableHttp(config, null);
+ String httpPort = getHttpPort(config, null);
+ boolean enableHttps = isEnableHttps(config, null);
+ String httpsPort = getHttpsPort(config, null);
+ boolean enableHttp2 = isEnableHttp2(config, null);
+ boolean enableRegistry = isEnableRegistry(config, null);
+ boolean eclipseIDE = isEclipseIDE(config, null);
+ boolean supportClient = isSupportClient(config, null);
+ boolean prometheusMetrics = isPrometheusMetrics(config, null);
+ String dockerOrganization = getDockerOrganization(config, null);
+ String version = getVersion(config, null);
+ String groupId = getGroupId(config, null);
+ String artifactId = getArtifactId(config, null);
+ String serviceId = groupId + "." + artifactId + "-" + version;
+ boolean specChangeCodeReGenOnly = isSpecChangeCodeReGenOnly(config, null);
+ boolean enableParamDescription = isEnableParamDescription(config, null);
+ boolean skipPomFile = isSkipPomFile(config, null);
+ boolean kafkaProducer = isKafkaProducer(config, null);
+ boolean kafkaConsumer = isKafkaConsumer(config, null);
+ boolean supportAvro = isSupportAvro(config, null);
+ String kafkaTopic = getKafkaTopic(config, null);
+ String decryptOption = getDecryptOption(config, null);
transfer(targetPath, "", "pom.xml", templates.graphql.pom.template(config));
transferMaven(targetPath);
@@ -65,7 +66,7 @@ public void generate(String targetPath, Object model, Any config) throws IOExcep
}
transfer(targetPath, "docker", "Dockerfile", templates.graphql.dockerfile.template(config, expose));
transfer(targetPath, "docker", "Dockerfile-Slim", templates.graphql.dockerfileslim.template(config, expose));
- transfer(targetPath, "", "build.sh", templates.graphql.buildSh.template(dockerOrganization, config.get("groupId") + "." + config.get("artifactId") + "-" + config.get("version")));
+ transfer(targetPath, "", "build.sh", templates.graphql.buildSh.template(dockerOrganization, serviceId));
transfer(targetPath, "", ".gitignore", templates.graphql.gitignore.template());
transfer(targetPath, "", "README.md", templates.graphql.README.template());
transfer(targetPath, "", "LICENSE", templates.graphql.LICENSE.template());
@@ -76,8 +77,8 @@ public void generate(String targetPath, Object model, Any config) throws IOExcep
// config
transfer(targetPath, ("src.main.resources.config").replace(".", separator), "service.yml", templates.graphql.serviceYml.template(config));
- transfer(targetPath, ("src.main.resources.config").replace(".", separator), "server.yml", templates.graphql.serverYml.template(config.get("groupId") + "." + config.get("artifactId") + "-" + config.get("version"), enableHttp, httpPort, enableHttps, httpsPort, enableHttp2, enableRegistry, version));
- transfer(targetPath, ("src.test.resources.config").replace(".", separator), "server.yml", templates.graphql.serverYml.template(config.get("groupId") + "." + config.get("artifactId") + "-" + config.get("version"), enableHttp, "49587", enableHttps, "49588", enableHttp2, enableRegistry, version));
+ transfer(targetPath, ("src.main.resources.config").replace(".", separator), "server.yml", templates.graphql.serverYml.template(serviceId, enableHttp, httpPort, enableHttps, httpsPort, enableHttp2, enableRegistry, version));
+ transfer(targetPath, ("src.test.resources.config").replace(".", separator), "server.yml", templates.graphql.serverYml.template(serviceId, enableHttp, "49587", enableHttps, "49588", enableHttp2, enableRegistry, version));
transfer(targetPath, ("src.main.resources.config").replace(".", separator), "graphql-security.yml", templates.graphql.securityYml.template());
transfer(targetPath, ("src.main.resources.config").replace(".", separator), "graphql-validator.yml", templates.graphql.validatorYml.template());
if(supportClient) {
@@ -100,7 +101,7 @@ public void generate(String targetPath, Object model, Any config) throws IOExcep
transfer(targetPath, ("src.main.resources").replace(".", separator), "logback.xml", templates.graphql.logback.template());
transfer(targetPath, ("src.test.resources").replace(".", separator), "logback-test.xml", templates.graphql.logback.template());
// handler.yml
- transfer(targetPath, ("src.main.resources.config").replace(".", separator), "handler.yml", templates.graphql.handlerYml.template(serviceId, prometheusMetrics, !skipHealthCheck, !skipServerInfo));
+ transfer(targetPath, ("src.main.resources.config").replace(".", separator), "handler.yml", templates.graphql.handlerYml.template(serviceId, prometheusMetrics));
// Copy schema
// The generator support both manually coded schema or schema defined in IDL. If schema.graphqls exists
@@ -109,10 +110,10 @@ public void generate(String targetPath, Object model, Any config) throws IOExcep
// If no schema file is passed in, then it will just hard-coded as a Hello World example so that developer
// can expand that to code his/her own schema.
if(overwriteSchemaClass) {
- if(model == null) {
+ if(schema == null) {
transfer(targetPath, ("src.main.java." + schemaPackage).replace(".", separator), schemaClass + ".java", templates.graphql.schemaClassExample.template(schemaPackage, schemaClass));
} else {
- Files.write(FileSystems.getDefault().getPath(targetPath, ("src.main.resources").replace(".", separator), "schema.graphqls"), ((String)model).getBytes(StandardCharsets.UTF_8));
+ Files.write(FileSystems.getDefault().getPath(targetPath, ("src.main.resources").replace(".", separator), "schema.graphqls"), ((String)schema).getBytes(StandardCharsets.UTF_8));
// schema class loader/generator template.
transfer(targetPath, ("src.main.java." + schemaPackage).replace(".", separator), schemaClass + ".java", templates.graphql.schemaClass.template(schemaPackage, schemaClass));
}
@@ -144,4 +145,37 @@ public void generate(String targetPath, Object model, Any config) throws IOExcep
}
}
+
+ private String getSchemaPackage(JsonNode config, String defaultValue) {
+ String schemaPackage = defaultValue == null ? "com.networknt.graphql.schema" : defaultValue;
+ JsonNode jsonNode = config.get("schemaPackage");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("schemaPackage", schemaPackage);
+ } else {
+ schemaPackage = jsonNode.textValue();
+ }
+ return schemaPackage;
+ }
+
+ private String getSchemaClass(JsonNode config, String defaultValue) {
+ String schemaClass = defaultValue == null ? "GraphQlSchema" : defaultValue;
+ JsonNode jsonNode = config.get("schemaClass");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("schemaClass", schemaClass);
+ } else {
+ schemaClass = jsonNode.textValue();
+ }
+ return schemaClass;
+ }
+
+ private boolean isOverwriteSchemaClass(JsonNode config, Boolean defaultValue) {
+ boolean overwriteSchemaClass = defaultValue == null ? false : defaultValue;
+ JsonNode jsonNode = config.get("overwriteSchemaClass");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("overwriteSchemaClass", overwriteSchemaClass);
+ } else {
+ overwriteSchemaClass = jsonNode.booleanValue();
+ }
+ return overwriteSchemaClass;
+ }
}
diff --git a/light-graphql-4j/src/main/resources/templates/graphql/dockerfile.rocker.raw b/light-graphql-4j/src/main/resources/templates/graphql/dockerfile.rocker.raw
index e4ee9f607..e4bc50f39 100644
--- a/light-graphql-4j/src/main/resources/templates/graphql/dockerfile.rocker.raw
+++ b/light-graphql-4j/src/main/resources/templates/graphql/dockerfile.rocker.raw
@@ -1,5 +1,5 @@
-@import com.jsoniter.any.Any
-@args (Any config, String expose)
+@import com.fasterxml.jackson.databind.JsonNode
+@args (JsonNode config, String expose)
FROM azul/zulu-openjdk-alpine:11 as packager
RUN { \
@@ -28,5 +28,5 @@ ENV JAVA_MINIMAL=/opt/jre
ENV PATH="$PATH:$JAVA_MINIMAL/bin"
COPY --from=packager "$JAVA_MINIMAL" "$JAVA_MINIMAL"
-@with (name = config.get("artifactId") + "-" + config.get("version") + ".jar") {COPY /target/@name server.jar}
+@with (name = config.get("artifactId").textValue() + "-" + config.get("version").textValue() + ".jar") {COPY /target/@name server.jar}
CMD ["/bin/sh","-c","java -Dlight-4j-config-dir=/config -Dlogback.configurationFile=/config/logback.xml -jar /server.jar"]
diff --git a/light-graphql-4j/src/main/resources/templates/graphql/dockerfileslim.rocker.raw b/light-graphql-4j/src/main/resources/templates/graphql/dockerfileslim.rocker.raw
index 6b46b54f0..b1e3a00cc 100644
--- a/light-graphql-4j/src/main/resources/templates/graphql/dockerfileslim.rocker.raw
+++ b/light-graphql-4j/src/main/resources/templates/graphql/dockerfileslim.rocker.raw
@@ -1,6 +1,6 @@
-@import com.jsoniter.any.Any
-@args (Any config, String expose)
+@import com.fasterxml.jackson.databind.JsonNode
+@args (JsonNode config, String expose)
FROM openjdk:11.0.3-slim
#EXPOSE @expose
-@with (name = config.get("artifactId") + "-" + config.get("version") + ".jar") {ADD /target/@name server.jar}
+@with (name = config.get("artifactId").textValue() + "-" + config.get("version").textValue() + ".jar") {ADD /target/@name server.jar}
CMD ["/bin/sh","-c","java -Dlight-4j-config-dir=/config -Dlogback.configurationFile=/config/logback.xml -jar /server.jar"]
diff --git a/light-graphql-4j/src/main/resources/templates/graphql/handlerYml.rocker.raw b/light-graphql-4j/src/main/resources/templates/graphql/handlerYml.rocker.raw
index fe9b97464..1229727f4 100644
--- a/light-graphql-4j/src/main/resources/templates/graphql/handlerYml.rocker.raw
+++ b/light-graphql-4j/src/main/resources/templates/graphql/handlerYml.rocker.raw
@@ -1,7 +1,6 @@
@import java.util.Map
@import java.util.List
-@import com.jsoniter.any.Any
-@args (String serviceId, boolean prometheusMetrics, boolean healthCheck, boolean serverInfo)
+@args (String serviceId, boolean prometheusMetrics)
# Handler middleware chain configuration
---
@@ -77,16 +76,16 @@ paths:
- default
- options
-@if(healthCheck){ - path: '/health/${server.serviceId:@serviceId}'
+ - path: '/health/${server.serviceId:@serviceId}'
method: 'get'
exec:
- health
-}
-@if(serverInfo){ - path: '/server/info'
+
+ - path: '/server/info'
method: 'get'
exec:
- info
-}
+
@if(prometheusMetrics){ - path: '/prometheus'
method: 'get'
exec:
diff --git a/light-graphql-4j/src/main/resources/templates/graphql/pom.xml.rocker.raw b/light-graphql-4j/src/main/resources/templates/graphql/pom.xml.rocker.raw
index 931d5106e..b44e3596d 100644
--- a/light-graphql-4j/src/main/resources/templates/graphql/pom.xml.rocker.raw
+++ b/light-graphql-4j/src/main/resources/templates/graphql/pom.xml.rocker.raw
@@ -1,12 +1,12 @@
-@import com.jsoniter.any.Any
-@args (Any config)
+@import com.fasterxml.jackson.databind.JsonNode
+@args (JsonNode config)
4.0.0
- @config.get("groupId")
- @config.get("artifactId")
+ @config.get("groupId").textValue()
+ @config.get("artifactId").textValue()
jar
- @config.get("name")
- @config.get("version")
+ @config.get("name").textValue()
+ @config.get("version").textValue()
11
@@ -21,19 +21,19 @@
2.1.3.Final
13.0
2.1.5
- @if(config.toBoolean("supportDb") || config.toBoolean("supportH2ForTest")){
+ @if(config.get("supportDb").booleanValue() || config.get("supportH2ForTest").booleanValue()){
3.1.0
}
- @if(config.toBoolean("supportDb") && "oracle".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "oracle".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
11.2.0.3
}
- @if(config.toBoolean("supportDb") && "mysql".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "mysql".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
8.0.16
}
- @if(config.toBoolean("supportDb") && "postgres".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "postgres".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
42.1.1
}
- @if(config.toBoolean("supportH2ForTest")){
+ @if(config.get("supportH2ForTest").booleanValue()){
1.3.176
}
2.4
@@ -226,28 +226,28 @@
rxjava
${version.rxjava}
- @if(config.toBoolean("supportDb") || config.toBoolean("supportH2ForTest")){
+ @if(config.get("supportDb").booleanValue() || config.get("supportH2ForTest").booleanValue()){
com.zaxxer
HikariCP
${version.hikaricp}
}
- @if(config.toBoolean("supportDb") && "oracle".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "oracle".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
com.oracle
ojdbc6
${version.oracle}
}
- @if(config.toBoolean("supportDb") && "mysql".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "mysql".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
mysql
mysql-connector-java
${version.mysql}
}
- @if(config.toBoolean("supportDb") && "postgres".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "postgres".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
org.postgresql
postgresql
@@ -261,7 +261,7 @@
${version.junit}
test
- @if(config.toBoolean("supportH2ForTest")){
+ @if(config.get("supportH2ForTest").booleanValue()){
com.h2database
h2
diff --git a/light-graphql-4j/src/main/resources/templates/graphql/serviceYml.rocker.raw b/light-graphql-4j/src/main/resources/templates/graphql/serviceYml.rocker.raw
index 24e6ece34..4fc3eb4b2 100644
--- a/light-graphql-4j/src/main/resources/templates/graphql/serviceYml.rocker.raw
+++ b/light-graphql-4j/src/main/resources/templates/graphql/serviceYml.rocker.raw
@@ -1,5 +1,5 @@
-@import com.jsoniter.any.Any
-@args (Any config)
+@import com.fasterxml.jackson.databind.JsonNode
+@args (JsonNode config)
# Singleton service factory configuration/IoC injection
singletons:
# HandlerProvider implementation
@@ -16,9 +16,9 @@ singletons:
# - com.networknt.server.Test1ShutdownHook
# GraphQL schema provider interface implementation
- com.networknt.graphql.router.SchemaProvider:
- - @with(schemaPackage = config.get("schemaPackage").toString() + "." + config.get("schemaClass").toString()) {@schemaPackage}
-@if(config.toBoolean("supportDb")){
-@with (driverClassName = config.toString("dbInfo", "driverClassName"), jdbcUrl=config.toString("dbInfo", "jdbcUrl"), username=config.toString("dbInfo", "username"), password=config.toString("dbInfo", "password")) {
+ - @with(schemaPackage = config.get("schemaPackage").textValue() + "." + config.get("schemaClass").textValue()) {@schemaPackage}
+@if(config.get("supportDb").booleanValue()){
+@with (driverClassName = config.path("dbInfo").path("driverClassName").textValue(), jdbcUrl=config.path("dbInfo").path("jdbcUrl").textValue(), username=config.path("dbInfo").path("username").textValue(), password=config.path("dbInfo").path("password").textValue()) {
- javax.sql.DataSource:
- com.zaxxer.hikari.HikariDataSource:
DriverClassName: @driverClassName
diff --git a/light-graphql-4j/src/test/java/com/networknt/codegen/graphql/GraphqlGeneratorTest.java b/light-graphql-4j/src/test/java/com/networknt/codegen/graphql/GraphqlGeneratorTest.java
index 8797ff433..ddc90a051 100644
--- a/light-graphql-4j/src/test/java/com/networknt/codegen/graphql/GraphqlGeneratorTest.java
+++ b/light-graphql-4j/src/test/java/com/networknt/codegen/graphql/GraphqlGeneratorTest.java
@@ -1,9 +1,8 @@
package com.networknt.codegen.graphql;
-import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.jsoniter.JsonIterator;
-import com.jsoniter.any.Any;
+import com.networknt.codegen.Generator;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -40,19 +39,19 @@ public static void tearDown() throws IOException {
@Test
public void testGeneratorWithSchema() throws IOException {
- Any anyConfig = JsonIterator.parse(GraphqlGeneratorTest.class.getResourceAsStream(configName), 1024).readAny();
+ JsonNode configNode = Generator.jsonMapper.readTree(GraphqlGeneratorTest.class.getResourceAsStream(configName));
try(InputStream is = GraphqlGenerator.class.getResourceAsStream(schemaName)) {
String schema = convertStreamToString(is);
GraphqlGenerator generator = new GraphqlGenerator();
- generator.generate(targetPath, schema, anyConfig);
+ generator.generate(targetPath, schema, configNode);
}
}
@Test
public void testGeneratorWithoutSchema() throws IOException {
- Any anyConfig = JsonIterator.parse(GraphqlGeneratorTest.class.getResourceAsStream(configName), 1024).readAny();
+ JsonNode configNode = Generator.jsonMapper.readTree(GraphqlGeneratorTest.class.getResourceAsStream(configName));
GraphqlGenerator generator = new GraphqlGenerator();
- generator.generate(targetPath, null, anyConfig);
+ generator.generate(targetPath, null, configNode);
}
static String convertStreamToString(java.io.InputStream is) {
diff --git a/light-graphql-4j/src/test/resources/config.json b/light-graphql-4j/src/test/resources/config.json
index 7910c4d7d..07f920cd0 100644
--- a/light-graphql-4j/src/test/resources/config.json
+++ b/light-graphql-4j/src/test/resources/config.json
@@ -10,8 +10,10 @@
"enableHttp": true,
"httpsPort": 8443,
"enableHttps": false,
+ "enableHttp2": false,
"enableRegistry": false,
"supportDb": true,
+ "eclipseIDE": false,
"dbInfo": {
"name": "mysql",
"driverClassName": "com.mysql.jdbc.Driver",
diff --git a/light-hybrid-4j/pom.xml b/light-hybrid-4j/pom.xml
index b6b95ffcb..bbc2a8ede 100644
--- a/light-hybrid-4j/pom.xml
+++ b/light-hybrid-4j/pom.xml
@@ -58,14 +58,10 @@
com.fizzed
rocker-compiler
provided
-
-
- com.jsoniter
- jsoniter
- org.javassist
- javassist
+ com.fasterxml.jackson.core
+ jackson-databind
diff --git a/light-hybrid-4j/src/main/java/com/networknt/codegen/hybrid/HybridGenerator.java b/light-hybrid-4j/src/main/java/com/networknt/codegen/hybrid/HybridGenerator.java
new file mode 100644
index 000000000..2debc07f7
--- /dev/null
+++ b/light-hybrid-4j/src/main/java/com/networknt/codegen/hybrid/HybridGenerator.java
@@ -0,0 +1,19 @@
+package com.networknt.codegen.hybrid;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.networknt.codegen.Generator;
+
+public interface HybridGenerator extends Generator {
+ default String getJsonPath(JsonNode config, String defaultValue) {
+ String jsonPath = defaultValue == null ? "/api/json" : defaultValue;
+ JsonNode jsonNode = config.get("jsonPath");
+ if(jsonNode == null) {
+ ((ObjectNode)config).put("jsonPath", jsonPath);
+ } else {
+ jsonPath = jsonNode.textValue();
+ }
+ return jsonPath;
+ }
+
+}
diff --git a/light-hybrid-4j/src/main/java/com/networknt/codegen/hybrid/HybridServerGenerator.java b/light-hybrid-4j/src/main/java/com/networknt/codegen/hybrid/HybridServerGenerator.java
index ac8871b80..3e97c9dcc 100644
--- a/light-hybrid-4j/src/main/java/com/networknt/codegen/hybrid/HybridServerGenerator.java
+++ b/light-hybrid-4j/src/main/java/com/networknt/codegen/hybrid/HybridServerGenerator.java
@@ -1,7 +1,6 @@
package com.networknt.codegen.hybrid;
-import com.jsoniter.any.Any;
-import com.networknt.codegen.Generator;
+import com.fasterxml.jackson.databind.JsonNode;
import java.io.IOException;
import java.io.InputStream;
@@ -14,42 +13,47 @@
/**
* Created by steve on 28/04/17.
*/
-public class HybridServerGenerator implements Generator {
+public class HybridServerGenerator implements HybridGenerator {
+ public static final String FRAMEWORK="light-hybrid-4j-server";
@Override
public String getFramework() {
- return "light-hybrid-4j-server";
+ return FRAMEWORK;
}
@Override
- public void generate(String targetPath, Object model, Any config) throws IOException {
+ public void generate(String targetPath, Object model, JsonNode config) throws IOException {
// whoever is calling this needs to make sure that model is converted to Map
- String rootPackage = config.get("rootPackage").toString();
- String modelPackage = config.get("modelPackage").toString();
- String handlerPackage = config.get("handlerPackage").toString();
-
- boolean enableHttp = config.toBoolean("enableHttp");
- String httpPort = config.toString("httpPort");
- boolean enableHttps = config.toBoolean("enableHttps");
- String httpsPort = config.toString("httpsPort");
- boolean enableHttp2 = config.toBoolean("enableHttp2");
- boolean enableRegistry = config.toBoolean("enableRegistry");
- boolean eclipseIDE = config.toBoolean("eclipseIDE");
- String dockerOrganization = config.toString("dockerOrganization");
- String artifactId = config.toString("artifactId");
- String version = config.toString("version");
- if(dockerOrganization == null || dockerOrganization.length() == 0) dockerOrganization = "networknt";
-
- boolean supportClient = config.toBoolean("supportClient");
- String serviceId = config.get("groupId").toString().trim() + "." + artifactId.trim() + "-" + config.get("version").toString().trim();
- boolean prometheusMetrics = config.toBoolean("prometheusMetrics");
- boolean skipHealthCheck = config.toBoolean("skipHealthCheck");
- boolean skipServerInfo = config.toBoolean("skipServerInfo");
- String jsonPath = config.get("jsonPath").toString();
- boolean kafkaProducer = config.toBoolean("kafkaProducer");
- boolean kafkaConsumer = config.toBoolean("kafkaConsumer");
- boolean supportAvro = config.toBoolean("supportAvro");
- String kafkaTopic = config.get("kafkaTopic").toString();
+ String rootPackage = getRootPackage(config, null);
+ String modelPackage = getModelPackage(config, null);
+ String handlerPackage = getHandlerPackage(config, null);
+ boolean overwriteHandler = isOverwriteHandler(config, null);
+ boolean overwriteHandlerTest = isOverwriteHandlerTest(config, null);
+ boolean overwriteModel = isOverwriteModel(config, null);
+ boolean generateModelOnly = isGenerateModelOnly(config, null);
+ boolean enableHttp = isEnableHttp(config, null);
+ String httpPort = getHttpPort(config, null);
+ boolean enableHttps = isEnableHttps(config, null);
+ String httpsPort = getHttpsPort(config, null);
+ boolean enableHttp2 = isEnableHttp2(config, null);
+ boolean enableRegistry = isEnableRegistry(config, null);
+ boolean eclipseIDE = isEclipseIDE(config, null);
+ boolean supportClient = isSupportClient(config, null);
+ boolean prometheusMetrics = isPrometheusMetrics(config, null);
+ String dockerOrganization = getDockerOrganization(config, null);
+ String version = getVersion(config, null);
+ String groupId = getGroupId(config, null);
+ String artifactId = getArtifactId(config, null);
+ String serviceId = groupId + "." + artifactId + "-" + version;
+ boolean specChangeCodeReGenOnly = isSpecChangeCodeReGenOnly(config, null);
+ boolean enableParamDescription = isEnableParamDescription(config, null);
+ boolean skipPomFile = isSkipPomFile(config, null);
+ boolean kafkaProducer = isKafkaProducer(config, null);
+ boolean kafkaConsumer = isKafkaConsumer(config, null);
+ boolean supportAvro = isSupportAvro(config, null);
+ String kafkaTopic = getKafkaTopic(config, null);
+ String decryptOption = getDecryptOption(config, null);
+ String jsonPath = getJsonPath(config, null);
transfer(targetPath, "", "pom.xml", templates.hybrid.server.pom.template(config));
transferMaven(targetPath);
@@ -64,7 +68,7 @@ public void generate(String targetPath, Object model, Any config) throws IOExcep
}
transfer(targetPath, "docker", "Dockerfile", templates.hybrid.server.dockerfile.template(config, expose));
transfer(targetPath, "docker", "Dockerfile-Slim", templates.hybrid.server.dockerfileslim.template(config, expose));
- transfer(targetPath, "", "build.sh", templates.hybrid.server.buildSh.template(dockerOrganization, config.get("groupId") + "." + config.get("artifactId") + "-" + config.get("version")));
+ transfer(targetPath, "", "build.sh", templates.hybrid.server.buildSh.template(dockerOrganization, serviceId));
transfer(targetPath, "", ".gitignore", templates.hybrid.gitignore.template());
transfer(targetPath, "", "README.md", templates.hybrid.server.README.template());
transfer(targetPath, "", "LICENSE", templates.hybrid.LICENSE.template());
@@ -76,8 +80,8 @@ public void generate(String targetPath, Object model, Any config) throws IOExcep
// config
transfer(targetPath, ("src.main.resources.config").replace(".", separator), "service.yml", templates.hybrid.serviceYml.template(config));
- transfer(targetPath, ("src.main.resources.config").replace(".", separator), "server.yml", templates.hybrid.serverYml.template(config.get("groupId") + "." + config.get("artifactId") + "-" + config.get("version"), enableHttp, httpPort, enableHttps, httpsPort, enableHttp2, enableRegistry, version));
- transfer(targetPath, ("src.test.resources.config").replace(".", separator), "server.yml", templates.hybrid.serverYml.template(config.get("groupId") + "." + config.get("artifactId") + "-" + config.get("version"), enableHttp, "49587", enableHttps, "49588", enableHttp2, enableRegistry, version));
+ transfer(targetPath, ("src.main.resources.config").replace(".", separator), "server.yml", templates.hybrid.serverYml.template(serviceId, enableHttp, httpPort, enableHttps, httpsPort, enableHttp2, enableRegistry, version));
+ transfer(targetPath, ("src.test.resources.config").replace(".", separator), "server.yml", templates.hybrid.serverYml.template(serviceId, enableHttp, "49587", enableHttps, "49588", enableHttp2, enableRegistry, version));
if(kafkaProducer) {
transfer(targetPath, ("src.main.resources.config").replace(".", separator), "kafka-producer.yml", templates.hybrid.kafkaProducerYml.template(kafkaTopic));
@@ -133,11 +137,12 @@ public void generate(String targetPath, Object model, Any config) throws IOExcep
}
transfer(targetPath, ("src.main.resources.config").replace(".", separator), "handler.yml",
- templates.hybrid.handlerYml.template(serviceId, handlerPackage, jsonPath, prometheusMetrics, !skipHealthCheck, !skipServerInfo));
+ templates.hybrid.handlerYml.template(serviceId, handlerPackage, jsonPath, prometheusMetrics));
transfer(targetPath, ("src.main.resources.config").replace(".", separator), "rpc-router.yml",
templates.hybrid.rpcRouterYml.template(handlerPackage, jsonPath));
}
+
}
diff --git a/light-hybrid-4j/src/main/java/com/networknt/codegen/hybrid/HybridServiceGenerator.java b/light-hybrid-4j/src/main/java/com/networknt/codegen/hybrid/HybridServiceGenerator.java
index 6f62203e0..b8e61b4d0 100644
--- a/light-hybrid-4j/src/main/java/com/networknt/codegen/hybrid/HybridServiceGenerator.java
+++ b/light-hybrid-4j/src/main/java/com/networknt/codegen/hybrid/HybridServiceGenerator.java
@@ -1,11 +1,11 @@
package com.networknt.codegen.hybrid;
-import com.jsoniter.ValueType;
-import com.jsoniter.any.Any;
-import com.jsoniter.output.JsonStream;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
import com.networknt.codegen.Generator;
import org.apache.commons.text.StringEscapeUtils;
+import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -22,7 +22,7 @@
/**
* Created by steve on 28/04/17.
*/
-public class HybridServiceGenerator implements Generator {
+public class HybridServiceGenerator implements HybridGenerator {
@Override
public String getFramework() {
@@ -30,28 +30,38 @@ public String getFramework() {
}
@Override
- public void generate(String targetPath, Object model, Any config) throws IOException {
+ public void generate(String targetPath, Object model, JsonNode config) throws IOException {
// whoever is calling this needs to make sure that model is converted to Map
- String handlerPackage = config.get("handlerPackage").toString();
- boolean overwriteHandler = config.toBoolean("overwriteHandler");
- boolean overwriteHandlerTest = config.toBoolean("overwriteHandlerTest");
- boolean enableHttp = config.toBoolean("enableHttp");
- boolean enableHttps = config.toBoolean("enableHttps");
- boolean enableHttp2 = config.toBoolean("enableHttp2");
- boolean enableRegistry = config.toBoolean("enableRegistry");
- boolean eclipseIDE = config.toBoolean("eclipseIDE");
- boolean supportClient = config.toBoolean("supportClient");
- String artifactId = config.toString("artifactId");
- String version = config.toString("version");
- String serviceId = config.get("groupId").toString().trim() + "." + artifactId.trim() + "-" + config.get("version").toString().trim();
- boolean prometheusMetrics = config.toBoolean("prometheusMetrics");
- boolean skipHealthCheck = config.toBoolean("skipHealthCheck");
- boolean skipServerInfo = config.toBoolean("skipServerInfo");
- String jsonPath = config.get("jsonPath").toString();
- boolean kafkaProducer = config.toBoolean("kafkaProducer");
- boolean kafkaConsumer = config.toBoolean("kafkaConsumer");
- boolean supportAvro = config.toBoolean("supportAvro");
- String kafkaTopic = config.get("kafkaTopic").toString();
+ String rootPackage = getRootPackage(config, null);
+ String modelPackage = getModelPackage(config, null);
+ String handlerPackage = getHandlerPackage(config, null);
+ boolean overwriteHandler = isOverwriteHandler(config, null);
+ boolean overwriteHandlerTest = isOverwriteHandlerTest(config, null);
+ boolean overwriteModel = isOverwriteModel(config, null);
+ boolean generateModelOnly = isGenerateModelOnly(config, null);
+ boolean enableHttp = isEnableHttp(config, null);
+ String httpPort = getHttpPort(config, null);
+ boolean enableHttps = isEnableHttps(config, null);
+ String httpsPort = getHttpsPort(config, null);
+ boolean enableHttp2 = isEnableHttp2(config, null);
+ boolean enableRegistry = isEnableRegistry(config, null);
+ boolean eclipseIDE = isEclipseIDE(config, null);
+ boolean supportClient = isSupportClient(config, null);
+ boolean prometheusMetrics = isPrometheusMetrics(config, null);
+ String dockerOrganization = getDockerOrganization(config, null);
+ String version = getVersion(config, null);
+ String groupId = getGroupId(config, null);
+ String artifactId = getArtifactId(config, null);
+ String serviceId = groupId + "." + artifactId + "-" + version;
+ boolean specChangeCodeReGenOnly = isSpecChangeCodeReGenOnly(config, null);
+ boolean enableParamDescription = isEnableParamDescription(config, null);
+ boolean skipPomFile = isSkipPomFile(config, null);
+ boolean kafkaProducer = isKafkaProducer(config, null);
+ boolean kafkaConsumer = isKafkaConsumer(config, null);
+ boolean supportAvro = isSupportAvro(config, null);
+ String kafkaTopic = getKafkaTopic(config, null);
+ String decryptOption = getDecryptOption(config, null);
+ String jsonPath = getJsonPath(config, null);
transfer(targetPath, "", "pom.xml", templates.hybrid.service.pom.template(config));
transferMaven(targetPath);
@@ -67,7 +77,7 @@ public void generate(String targetPath, Object model, Any config) throws IOExcep
// config
transfer(targetPath, ("src.test.resources.config").replace(".", separator), "service.yml", templates.hybrid.serviceYml.template(config));
- transfer(targetPath, ("src.test.resources.config").replace(".", separator), "server.yml", templates.hybrid.serverYml.template(config.get("groupId") + "." + config.get("artifactId") + "-" + config.get("version"), enableHttp, "49587", enableHttps, "49588", enableHttp2, enableRegistry, version));
+ transfer(targetPath, ("src.test.resources.config").replace(".", separator), "server.yml", templates.hybrid.serverYml.template(serviceId, enableHttp, "49587", enableHttps, "49588", enableHttp2, enableRegistry, version));
//transfer(targetPath, ("src.test.resources.config").replace(".", separator), "secret.yml", templates.hybrid.secretYml.template());
transfer(targetPath, ("src.test.resources.config").replace(".", separator), "hybrid-security.yml", templates.hybrid.securityYml.template());
transfer(targetPath, ("src.test.resources.config").replace(".", separator), "client.yml", templates.hybrid.clientYml.template());
@@ -93,37 +103,38 @@ public void generate(String targetPath, Object model, Any config) throws IOExcep
// handler
Map services = new HashMap();
- Any anyModel = (Any)model;
- String host = anyModel.toString("host");
- String service = anyModel.toString("service");
- List items = anyModel.get("action").asList();
- if(items != null && items.size() > 0) {
- for(Any item : items) {
- Any any = item.get("example");
- String example = any.valueType() != ValueType.INVALID ? StringEscapeUtils.escapeJson(any.toString()).trim() : "";
- if(!overwriteHandler && checkExist(targetPath, ("src.main.java." + handlerPackage).replace(".", separator), item.get("handler") + ".java")) {
+ JsonNode anyModel = (JsonNode)model;
+ String host = anyModel.get("host").textValue();
+ String service = anyModel.get("service").textValue();
+ JsonNode jsonNode = anyModel.get("action");
+ if(jsonNode != null && jsonNode.isArray()) {
+ ArrayNode items = (ArrayNode)jsonNode;
+ for(JsonNode item : items) {
+ JsonNode any = item.get("example");
+ String example = any != null ? StringEscapeUtils.escapeJson(any.toString()).trim() : "";
+ if(!overwriteHandler && checkExist(targetPath, ("src.main.java." + handlerPackage).replace(".", separator), item.get("handler").textValue() + ".java")) {
continue;
}
- transfer(targetPath, ("src.main.java." + handlerPackage).replace(".", separator), item.get("handler") + ".java", templates.hybrid.handler.template(handlerPackage, host, service, item, example));
+ transfer(targetPath, ("src.main.java." + handlerPackage).replace(".", separator), item.get("handler").textValue() + ".java", templates.hybrid.handler.template(handlerPackage, host, service, item, example));
String sId = host + "/" + service + "/" + item.get("name") + "/" + item.get("version");
Map map = new HashMap<>();
map.put("schema", item.get("schema"));
- Any anyScope = item.get("scope");
- String scope = anyScope.valueType() != ValueType.INVALID ? anyScope.toString().trim() : null;
+ JsonNode anyScope = item.get("scope");
+ String scope = anyScope != null ? anyScope.textValue().trim() : null;
if(scope != null) map.put("scope", scope);
- Any anySkipAuth = item.get("skipAuth");
- Boolean skipAuth = anySkipAuth.valueType() != ValueType.INVALID ? anySkipAuth.toBoolean() : null;
+ JsonNode anySkipAuth = item.get("skipAuth");
+ Boolean skipAuth = anySkipAuth != null ? anySkipAuth.booleanValue() : false;
if(skipAuth != null) map.put("skipAuth", skipAuth);
services.put(sId, map);
}
// handler test cases
transfer(targetPath, ("src.test.java." + handlerPackage + ".").replace(".", separator), "TestServer.java", templates.hybrid.testServer.template(handlerPackage));
- for(Any item : items) {
- if(!overwriteHandlerTest && checkExist(targetPath, ("src.test.java." + handlerPackage).replace(".", separator), item.get("handler") + "Test.java")) {
+ for(JsonNode item : items) {
+ if(!overwriteHandlerTest && checkExist(targetPath, ("src.test.java." + handlerPackage).replace(".", separator), item.get("handler").textValue() + "Test.java")) {
continue;
}
- transfer(targetPath, ("src.test.java." + handlerPackage).replace(".", separator), item.get("handler") + "Test.java", templates.hybrid.handlerTest.template(handlerPackage, host, service, item));
+ transfer(targetPath, ("src.test.java." + handlerPackage).replace(".", separator), item.get("handler").textValue() + "Test.java", templates.hybrid.handlerTest.template(handlerPackage, host, service, item));
}
}
@@ -147,12 +158,14 @@ public void generate(String targetPath, Object model, Any config) throws IOExcep
}
transfer(targetPath, ("src.test.resources.config").replace(".", separator), "handler.yml",
- templates.hybrid.handlerYml.template(serviceId, handlerPackage, jsonPath, prometheusMetrics, !skipHealthCheck, !skipServerInfo));
+ templates.hybrid.handlerYml.template(serviceId, handlerPackage, jsonPath, prometheusMetrics));
transfer(targetPath, ("src.test.resources.config").replace(".", separator), "rpc-router.yml",
templates.hybrid.rpcRouterYml.template(handlerPackage, jsonPath));
// write the generated schema into the config folder for schema validation.
- JsonStream.serialize(services, new FileOutputStream(FileSystems.getDefault().getPath(targetPath, ("src.main.resources").replace(".", separator), "schema.json").toFile()));
+ try (InputStream is = new ByteArrayInputStream(Generator.jsonMapper.writerWithDefaultPrettyPrinter().writeValueAsBytes(services))) {
+ Generator.copyFile(is, Paths.get(targetPath, ("src.main.resources").replace(".", separator), "schema.json"));
+ }
}
}
diff --git a/light-hybrid-4j/src/main/resources/templates/hybrid/handler.rocker.raw b/light-hybrid-4j/src/main/resources/templates/hybrid/handler.rocker.raw
index 8d62835ea..411143d91 100644
--- a/light-hybrid-4j/src/main/resources/templates/hybrid/handler.rocker.raw
+++ b/light-hybrid-4j/src/main/resources/templates/hybrid/handler.rocker.raw
@@ -1,5 +1,5 @@
-@import com.jsoniter.any.Any
-@args (String handlerPackage, String host, String service, Any item, String example)
+@import com.fasterxml.jackson.databind.JsonNode
+@args (String handlerPackage, String host, String service, JsonNode item, String example)
package @handlerPackage;
import com.networknt.utility.NioUtils;
@@ -12,8 +12,8 @@ import io.undertow.server.HttpServerExchange;
For more information on how to write business handlers, please check the link below.
https://doc.networknt.com/development/business-handler/hybrid/
*/
-@@ServiceHandler(id="@host/@service/@item.get("name")/@item.get("version")")
-public class @item.get("handler") implements Handler {
+@@ServiceHandler(id="@host/@service/@item.get("name").textValue()/@item.get("version").textValue()")
+public class @item.get("handler").textValue() implements Handler {
@@Override
public ByteBuffer handle(HttpServerExchange exchange, Object input) {
return NioUtils.toByteBuffer("@example");
diff --git a/light-hybrid-4j/src/main/resources/templates/hybrid/handlerTest.rocker.raw b/light-hybrid-4j/src/main/resources/templates/hybrid/handlerTest.rocker.raw
index 1af4cab22..c064e886d 100644
--- a/light-hybrid-4j/src/main/resources/templates/hybrid/handlerTest.rocker.raw
+++ b/light-hybrid-4j/src/main/resources/templates/hybrid/handlerTest.rocker.raw
@@ -1,5 +1,5 @@
-@import com.jsoniter.any.Any
-@args (String handlerPackage, String host, String service, Any item)
+@import com.fasterxml.jackson.databind.JsonNode
+@args (String handlerPackage, String host, String service, JsonNode item)
package @handlerPackage;
import com.networknt.client.Http2Client;
@@ -23,11 +23,11 @@ import java.net.URI;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicReference;
-@with(s1 = item.get("handler") + "Test") {public class @s1} {
+@with(s1 = item.get("handler").textValue() + "Test") {public class @s1} {
@@ClassRule
public static TestServer server = TestServer.getInstance();
- @with(s2 = item.get("handler") + ".class") {static final Logger logger = LoggerFactory.getLogger(@s2); }
+ @with(s2 = item.get("handler").textValue() + ".class") {static final Logger logger = LoggerFactory.getLogger(@s2); }
static final boolean enableHttp2 = server.getServerConfig().isEnableHttp2();
static final boolean enableHttps = server.getServerConfig().isEnableHttps();
static final int httpPort = server.getServerConfig().getHttpPort();
@@ -35,7 +35,7 @@ import java.util.concurrent.atomic.AtomicReference;
static final String url = enableHttp2 || enableHttps ? "https://localhost:" + httpsPort : "http://localhost:" + httpPort;
@@Test
- @with(s3 = item.get("handler") + "()") {public void test@s3} throws ClientException, ApiException {
+ @with(s3 = item.get("handler").textValue() + "()") {public void test@s3} throws ClientException, ApiException {
/*
final Http2Client client = Http2Client.getInstance();
final CountDownLatch latch = new CountDownLatch(1);
diff --git a/light-hybrid-4j/src/main/resources/templates/hybrid/handlerYml.rocker.raw b/light-hybrid-4j/src/main/resources/templates/hybrid/handlerYml.rocker.raw
index 2e7565b5c..fc0f90920 100644
--- a/light-hybrid-4j/src/main/resources/templates/hybrid/handlerYml.rocker.raw
+++ b/light-hybrid-4j/src/main/resources/templates/hybrid/handlerYml.rocker.raw
@@ -1,7 +1,6 @@
@import java.util.Map
@import java.util.List
-@import com.jsoniter.any.Any
-@args (String serviceId, String handlerPackage, String jsonPath, boolean prometheusMetrics, boolean healthCheck, boolean serverInfo)
+@args (String serviceId, String handlerPackage, String jsonPath, boolean prometheusMetrics)
# Handler middleware chain configuration
#----------------------------------------
@@ -84,16 +83,16 @@ paths:
exec:
- default
-@if(healthCheck){ - path: '/health/${server.serviceId:@serviceId}'
+ - path: '/health/${server.serviceId:@serviceId}'
method: 'get'
exec:
- health
-}
-@if(serverInfo){ - path: '/server/info'
+
+ - path: '/server/info'
method: 'get'
exec:
- info
-}
+
@if(prometheusMetrics){ - path: '/prometheus'
method: 'get'
exec:
diff --git a/light-hybrid-4j/src/main/resources/templates/hybrid/server/dockerfile.rocker.raw b/light-hybrid-4j/src/main/resources/templates/hybrid/server/dockerfile.rocker.raw
index 8cd8b3681..6895ad013 100644
--- a/light-hybrid-4j/src/main/resources/templates/hybrid/server/dockerfile.rocker.raw
+++ b/light-hybrid-4j/src/main/resources/templates/hybrid/server/dockerfile.rocker.raw
@@ -1,5 +1,5 @@
-@import com.jsoniter.any.Any
-@args (Any config, String expose)
+@import com.fasterxml.jackson.databind.JsonNode
+@args (JsonNode config, String expose)
FROM azul/zulu-openjdk-alpine:11 as packager
RUN { \
@@ -28,5 +28,5 @@ ENV JAVA_MINIMAL=/opt/jre
ENV PATH="$PATH:$JAVA_MINIMAL/bin"
COPY --from=packager "$JAVA_MINIMAL" "$JAVA_MINIMAL"
-@with (name = config.get("artifactId") + "-" + config.get("version") + ".jar") {COPY /target/@name server.jar}
+@with (name = config.get("artifactId").textValue() + "-" + config.get("version").textValue() + ".jar") {COPY /target/@name server.jar}
CMD ["/bin/sh","-c","java -Dlight-4j-config-dir=/config -Dlogback.configurationFile=/config/logback.xml -cp /server.jar:/service/* com.networknt.server.Server"]
diff --git a/light-hybrid-4j/src/main/resources/templates/hybrid/server/dockerfileslim.rocker.raw b/light-hybrid-4j/src/main/resources/templates/hybrid/server/dockerfileslim.rocker.raw
index 917653fc7..696c869aa 100644
--- a/light-hybrid-4j/src/main/resources/templates/hybrid/server/dockerfileslim.rocker.raw
+++ b/light-hybrid-4j/src/main/resources/templates/hybrid/server/dockerfileslim.rocker.raw
@@ -1,5 +1,5 @@
-@import com.jsoniter.any.Any
-@args (Any config, String expose)
+@import com.fasterxml.jackson.databind.JsonNode
+@args (JsonNode config, String expose)
FROM openjdk:11.0.3-slim
-@with (name = config.get("artifactId") + "-" + config.get("version") + ".jar") {ADD /target/@name server.jar}
+@with (name = config.get("artifactId").textValue() + "-" + config.get("version").textValue() + ".jar") {ADD /target/@name server.jar}
CMD ["/bin/sh","-c","java -Dlight-4j-config-dir=/config -Dlogback.configurationFile=/config/logback.xml -cp /server.jar:/service/* com.networknt.server.Server"]
diff --git a/light-hybrid-4j/src/main/resources/templates/hybrid/server/pom.xml.rocker.raw b/light-hybrid-4j/src/main/resources/templates/hybrid/server/pom.xml.rocker.raw
index 44d5cbebf..af549d281 100644
--- a/light-hybrid-4j/src/main/resources/templates/hybrid/server/pom.xml.rocker.raw
+++ b/light-hybrid-4j/src/main/resources/templates/hybrid/server/pom.xml.rocker.raw
@@ -1,12 +1,12 @@
-@import com.jsoniter.any.Any
-@args (Any config)
+@import com.fasterxml.jackson.databind.JsonNode
+@args (JsonNode config)
4.0.0
- @config.get("groupId")
- @config.get("artifactId")
+ @config.get("groupId").textValue()
+ @config.get("artifactId").textValue()
jar
- @config.get("name")
- @config.get("version")
+ @config.get("artifactId").textValue()
+ @config.get("version").textValue()
11
@@ -20,25 +20,25 @@
4.12
2.1.3.Final
1.0.29
- @if(config.toBoolean("supportDb") || config.toBoolean("supportH2ForTest")){
+ @if(config.get("supportDb").booleanValue() || config.get("supportH2ForTest").booleanValue()){
3.1.0
}
- @if(config.toBoolean("supportDb") && "oracle".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "oracle".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
11.2.0.3
}
- @if(config.toBoolean("supportDb") && "mysql".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "mysql".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
8.0.16
}
- @if(config.toBoolean("supportDb") && "postgres".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "postgres".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
42.1.1
}
- @if(config.toBoolean("supportH2ForTest")){
+ @if(config.get("supportH2ForTest").booleanValue()){
1.3.176
}
- @if(config.toBoolean("supportAvro")){
+ @if(config.get("supportAvro").booleanValue()){
5.3.3
}
- @if(config.toBoolean("kafkaProducer")||config.toBoolean("kafkaConsumer")){
+ @if(config.get("kafkaProducer").booleanValue() || config.get("kafkaConsumer").booleanValue()){
2.5.0
}
2.4
@@ -114,21 +114,21 @@
json-schema-validator
${version.json-schema-validator}
- @if(config.toBoolean("kafkaProducer")||config.toBoolean("kafkaConsumer")){
+ @if(config.get("kafkaProducer").booleanValue() || config.get("kafkaConsumer").booleanValue()){
com.networknt
kafka-common
${version.light-4j}
}
- @if(config.toBoolean("kafkaProducer")){
+ @if(config.get("kafkaProducer").booleanValue()){
com.networknt
kafka-producer
${version.light-4j}
}
- @if(config.toBoolean("kafkaConsumer")){
+ @if(config.get("kafkaConsumer").booleanValue()){
com.networknt
kafka-consumer
@@ -170,35 +170,35 @@
undertow-core
${version.undertow}
- @if(config.toBoolean("supportDb") || config.toBoolean("supportH2ForTest")){
+ @if(config.get("supportDb").booleanValue() || config.get("supportH2ForTest").booleanValue()){
com.zaxxer
HikariCP
${version.hikaricp}
}
- @if(config.toBoolean("supportDb") && "oracle".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "oracle".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
com.oracle
ojdbc6
${version.oracle}
}
- @if(config.toBoolean("supportDb") && "mysql".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "mysql".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
mysql
mysql-connector-java
${version.mysql}
}
- @if(config.toBoolean("supportDb") && "postgres".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "postgres".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
org.postgresql
postgresql
${version.postgres}
}
- @if(config.toBoolean("supportAvro")){
+ @if(config.get("supportAvro").booleanValue()){
io.confluent
kafka-schema-registry-client
@@ -212,7 +212,7 @@
${version.junit}
test
- @if(config.toBoolean("supportH2ForTest")){
+ @if(config.get("supportH2ForTest").booleanValue()){
com.h2database
h2
@@ -320,7 +320,7 @@
- @if(config.toBoolean("supportAvro")){
+ @if(config.get("supportAvro").booleanValue()){
confluent
http://packages.confluent.io/maven/
diff --git a/light-hybrid-4j/src/main/resources/templates/hybrid/service/pom.xml.rocker.raw b/light-hybrid-4j/src/main/resources/templates/hybrid/service/pom.xml.rocker.raw
index 77813d113..2c2bb4341 100644
--- a/light-hybrid-4j/src/main/resources/templates/hybrid/service/pom.xml.rocker.raw
+++ b/light-hybrid-4j/src/main/resources/templates/hybrid/service/pom.xml.rocker.raw
@@ -1,12 +1,12 @@
-@import com.jsoniter.any.Any
-@args (Any config)
+@import com.fasterxml.jackson.databind.JsonNode
+@args (JsonNode config)
4.0.0
- @config.get("groupId")
- @config.get("artifactId")
+ @config.get("groupId").textValue()
+ @config.get("artifactId").textValue()
jar
- @config.get("name")
- @config.get("version")
+ @config.get("artifactId").textValue()
+ @config.get("version").textValue()
11
@@ -20,25 +20,25 @@
4.12
2.1.3.Final
1.0.29
- @if(config.toBoolean("supportDb") || config.toBoolean("supportH2ForTest")){
+ @if(config.get("supportDb").booleanValue() || config.get("supportH2ForTest").booleanValue()){
3.1.0
}
- @if(config.toBoolean("supportDb") && "oracle".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "oracle".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
11.2.0.3
}
- @if(config.toBoolean("supportDb") && "mysql".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "mysql".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
8.0.16
}
- @if(config.toBoolean("supportDb") && "postgres".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "postgres".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
42.1.1
}
- @if(config.toBoolean("supportH2ForTest")){
+ @if(config.get("supportH2ForTest").booleanValue()){
1.3.176
}
- @if(config.toBoolean("supportAvro")){
+ @if(config.get("supportAvro").booleanValue()){
5.3.3
}
- @if(config.toBoolean("kafkaProducer")||config.toBoolean("kafkaConsumer")){
+ @if(config.get("kafkaProducer").booleanValue() || config.get("kafkaConsumer").booleanValue()){
2.5.0
}
2.4
@@ -104,21 +104,21 @@
json-schema-validator
${version.json-schema-validator}
- @if(config.toBoolean("kafkaProducer")||config.toBoolean("kafkaConsumer")){
+ @if(config.get("kafkaProducer").booleanValue() || config.get("kafkaConsumer").booleanValue()){
com.networknt
kafka-common
${version.light-4j}
}
- @if(config.toBoolean("kafkaProducer")){
+ @if(config.get("kafkaProducer").booleanValue()){
com.networknt
kafka-producer
${version.light-4j}
}
- @if(config.toBoolean("kafkaConsumer")){
+ @if(config.get("kafkaConsumer").booleanValue()){
com.networknt
kafka-consumer
@@ -155,35 +155,35 @@
undertow-core
${version.undertow}
- @if(config.toBoolean("supportDb") || config.toBoolean("supportH2ForTest")){
+ @if(config.get("supportDb").booleanValue() || config.get("supportH2ForTest").booleanValue()){
com.zaxxer
HikariCP
${version.hikaricp}
}
- @if(config.toBoolean("supportDb") && "oracle".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "oracle".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
com.oracle
ojdbc6
${version.oracle}
}
- @if(config.toBoolean("supportDb") && "mysql".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "mysql".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
mysql
mysql-connector-java
${version.mysql}
}
- @if(config.toBoolean("supportDb") && "postgres".equalsIgnoreCase(config.toString("dbInfo", "name"))){
+ @if(config.get("supportDb").booleanValue() && "postgres".equalsIgnoreCase(config.path("dbInfo").path("name").textValue())){
org.postgresql
postgresql
${version.postgres}
}
- @if(config.toBoolean("supportAvro")){
+ @if(config.get("supportAvro").booleanValue()){
io.confluent
kafka-schema-registry-client
@@ -197,7 +197,7 @@
${version.junit}
test
- @if(config.toBoolean("supportH2ForTest")){
+ @if(config.get("supportH2ForTest").booleanValue()){
com.h2database
h2
@@ -305,7 +305,7 @@
- @if(config.toBoolean("supportAvro")){
+ @if(config.get("supportAvro").booleanValue()){
confluent
http://packages.confluent.io/maven/
diff --git a/light-hybrid-4j/src/main/resources/templates/hybrid/serviceYml.rocker.raw b/light-hybrid-4j/src/main/resources/templates/hybrid/serviceYml.rocker.raw
index b17a5897e..b4195519a 100644
--- a/light-hybrid-4j/src/main/resources/templates/hybrid/serviceYml.rocker.raw
+++ b/light-hybrid-4j/src/main/resources/templates/hybrid/serviceYml.rocker.raw
@@ -1,40 +1,40 @@
-@import com.jsoniter.any.Any
-@args (Any config)
+@import com.fasterxml.jackson.databind.JsonNode
+@args (JsonNode config)
# Singleton service factory configuration/IoC injection
singletons:
# StartupHookProvider implementations, there are one to many and they are called in the same sequence defined.
- com.networknt.server.StartupHookProvider:
# registry all service handlers by from annotations
- com.networknt.rpc.router.RpcStartupHookProvider
- @if(config.toBoolean("kafkaProducer")){
+ @if(config.get("kafkaProducer").booleanValue()){
# Kafka producer startup hook example
# - net.lightapi.portal.user.command.UserCommandStartup
}
- @if(config.toBoolean("kafkaConsumer")){
+ @if(config.get("kafkaConsumer").booleanValue()){
# Kafka consumer startup hook example
# - net.lightapi.portal.user.query.UserQueryStartup
}
# ShutdownHookProvider implementations, there are one to many and they are called in the same sequence defined.
- com.networknt.server.ShutdownHookProvider:
- @if(config.toBoolean("kafkaProducer")){
+ @if(config.get("kafkaProducer").booleanValue()){
# Kafka producer startup hook example
# - net.lightapi.portal.user.command.UserCommandShutdown
}
- @if(config.toBoolean("kafkaConsumer")){
+ @if(config.get("kafkaConsumer").booleanValue()){
# Kafka consumer startup hook example
# - net.lightapi.portal.user.query.UserQueryShutdown
}
-@if(config.toBoolean("kafkaProducer")){
+@if(config.get("kafkaProducer").booleanValue()){
- com.networknt.kafka.producer.LightProducer:
- com.networknt.kafka.producer.TransactionalProducer
}
-@if(config.toBoolean("kafkaConsumer")){
+@if(config.get("kafkaConsumer").booleanValue()){
- com.networknt.kafka.streams.LightStreams:
# Kafka streams processor example
# - net.lightapi.portal.user.query.UserQueryStreams
}
-@if(config.toBoolean("supportDb")){
-@with (driverClassName = config.toString("dbInfo", "driverClassName"), jdbcUrl=config.toString("dbInfo", "jdbcUrl"), username=config.toString("dbInfo", "username"), password=config.toString("dbInfo", "password")) {
+@if(config.get("supportDb").booleanValue()){
+@with (driverClassName = config.path("dbInfo").path("driverClassName").textValue(), jdbcUrl=config.path("dbInfo").path("jdbcUrl").textValue(), username=config.path("dbInfo").path("username").textValue(), password=config.path("dbInfo").path("password").textValue()) {
- javax.sql.DataSource:
- com.zaxxer.hikari.HikariDataSource:
DriverClassName: @driverClassName
diff --git a/light-hybrid-4j/src/test/java/com/networknt/codegen/hybrid/HybridServerGeneratorTest.java b/light-hybrid-4j/src/test/java/com/networknt/codegen/hybrid/HybridServerGeneratorTest.java
index 8aa743d21..8cfc8f216 100644
--- a/light-hybrid-4j/src/test/java/com/networknt/codegen/hybrid/HybridServerGeneratorTest.java
+++ b/light-hybrid-4j/src/test/java/com/networknt/codegen/hybrid/HybridServerGeneratorTest.java
@@ -1,9 +1,8 @@
package com.networknt.codegen.hybrid;
-import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.jsoniter.JsonIterator;
-import com.jsoniter.any.Any;
+import com.networknt.codegen.Generator;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -11,7 +10,6 @@
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
-import java.util.Map;
/**
* Created by steve on 28/04/17.
@@ -36,10 +34,9 @@ public static void tearDown() throws IOException {
@Test
public void testGenerator() throws IOException {
- Any anyConfig = JsonIterator.parse(HybridServerGeneratorTest.class.getResourceAsStream(configName), 1024).readAny();
-
+ JsonNode config = Generator.jsonMapper.readTree(HybridServerGeneratorTest.class.getResourceAsStream(configName));
HybridServerGenerator generator = new HybridServerGenerator();
- generator.generate(targetPath, null, anyConfig);
+ generator.generate(targetPath, null, config);
}
@Test
diff --git a/light-hybrid-4j/src/test/java/com/networknt/codegen/hybrid/HybridServiceGeneratorTest.java b/light-hybrid-4j/src/test/java/com/networknt/codegen/hybrid/HybridServiceGeneratorTest.java
index 1ae04db32..6bec4bf0f 100644
--- a/light-hybrid-4j/src/test/java/com/networknt/codegen/hybrid/HybridServiceGeneratorTest.java
+++ b/light-hybrid-4j/src/test/java/com/networknt/codegen/hybrid/HybridServiceGeneratorTest.java
@@ -1,9 +1,7 @@
package com.networknt.codegen.hybrid;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.jsoniter.JsonIterator;
-import com.jsoniter.any.Any;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.networknt.codegen.Generator;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -11,7 +9,6 @@
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
-import java.util.Map;
/**
* Created by steve on 28/04/17.
@@ -34,11 +31,10 @@ public static void tearDown() throws IOException {
@Test
public void testGenerator() throws IOException {
- Any anyConfig = JsonIterator.parse(HybridServiceGeneratorTest.class.getResourceAsStream(configName), 1024).readAny();
- Any anyModel = JsonIterator.parse(HybridServiceGeneratorTest.class.getResourceAsStream(schemaName), 1024).readAny();
-
+ JsonNode config = Generator.jsonMapper.readTree(HybridServiceGeneratorTest.class.getResourceAsStream(configName));
+ JsonNode model = Generator.jsonMapper.readTree(HybridServiceGeneratorTest.class.getResourceAsStream(schemaName));
HybridServiceGenerator generator = new HybridServiceGenerator();
- generator.generate(targetPath, anyModel, anyConfig);
+ generator.generate(targetPath, model, config);
}
@Test
diff --git a/light-hybrid-4j/src/test/resources/serverConfig.json b/light-hybrid-4j/src/test/resources/serverConfig.json
index e9adc11e6..5a7ed9342 100644
--- a/light-hybrid-4j/src/test/resources/serverConfig.json
+++ b/light-hybrid-4j/src/test/resources/serverConfig.json
@@ -10,6 +10,7 @@
"enableHttp": true,
"httpsPort": 8443,
"enableHttps": false,
+ "enableHttp2": false,
"enableRegistry": false,
"supportDb": true,
"dbInfo": {
diff --git a/light-hybrid-4j/src/test/resources/serviceConfig.json b/light-hybrid-4j/src/test/resources/serviceConfig.json
index f59fff7fc..35ba6c4d3 100644
--- a/light-hybrid-4j/src/test/resources/serviceConfig.json
+++ b/light-hybrid-4j/src/test/resources/serviceConfig.json
@@ -12,6 +12,7 @@
"enableHttp": true,
"httpsPort": 8443,
"enableHttps": false,
+ "enableHttp2": false,
"enableRegistry": false,
"supportDb": true,
"dbInfo": {
diff --git a/light-rest-4j/pom.xml b/light-rest-4j/pom.xml
index 78c672651..33a706e23 100644
--- a/light-rest-4j/pom.xml
+++ b/light-rest-4j/pom.xml
@@ -48,12 +48,8 @@
- com.jsoniter
- jsoniter
-
-
- org.javassist
- javassist
+ com.fasterxml.jackson.core
+ jackson-databind
org.slf4j
@@ -80,10 +76,6 @@
io.github.classgraph
classgraph
-
- io.swagger.core.v3
- swagger-core
-
ch.qos.logback
logback-classic
diff --git a/light-rest-4j/src/main/java/com/networknt/codegen/rest/ModelCallback.java b/light-rest-4j/src/main/java/com/networknt/codegen/rest/ModelCallback.java
new file mode 100644
index 000000000..95fab71f4
--- /dev/null
+++ b/light-rest-4j/src/main/java/com/networknt/codegen/rest/ModelCallback.java
@@ -0,0 +1,8 @@
+package com.networknt.codegen.rest;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ModelCallback {
+ void callback(String targetPath, String modelPackage, String modelFileName, String enumsIfClass, String parentClassName, String classVarName, boolean abstractIfClass, List