diff --git a/.gitignore b/.gitignore
index 44e637c..17427be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
.factorypath
.idea
/fizz-gateway-community.iml
+*.iml
diff --git a/fizz-bootstrap/pom.xml b/fizz-bootstrap/pom.xml
index 25b2530..6a4ca5a 100644
--- a/fizz-bootstrap/pom.xml
+++ b/fizz-bootstrap/pom.xml
@@ -46,7 +46,13 @@
fizz-spring-boot-starter
${project.version}
-
+
+
+
+
+ org.reflections
+ reflections
+ ${reflections.version}
+
+
org.apache.curator
curator-client
@@ -279,5 +285,13 @@
repo
file://${project.basedir}/../repo
+
+ sonatype-snapshots
+ SonaType Snapshots
+ https://oss.sonatype.org/content/repositories/snapshots
+
+ true
+
+
\ No newline at end of file
diff --git a/fizz-core/src/main/java/we/fizz/ConfigLoader.java b/fizz-core/src/main/java/we/fizz/ConfigLoader.java
index 632d6bd..86598ea 100644
--- a/fizz-core/src/main/java/we/fizz/ConfigLoader.java
+++ b/fizz-core/src/main/java/we/fizz/ConfigLoader.java
@@ -31,15 +31,10 @@ import org.apache.commons.io.FileUtils;
import org.noear.snack.ONode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.ReactiveStringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
-import we.fizz.input.extension.grpc.GrpcInput;
-import we.fizz.input.extension.dubbo.DubboInput;
-import we.fizz.input.extension.mysql.MySQLInput;
-import we.fizz.input.extension.request.RequestInput;
import we.flume.clients.log4j2appender.LogService;
import we.util.Constants;
import we.util.ReactorUtils;
@@ -55,11 +50,7 @@ import java.io.IOException;
import java.io.Serializable;
import java.lang.ref.SoftReference;
import java.nio.charset.StandardCharsets;
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -147,10 +138,6 @@ public class ConfigLoader {
public Pipeline createPipeline(String configStr) throws IOException {
ONode cfgNode = ONode.loadStr(configStr);
- InputFactory.registerInput(RequestInput.TYPE, RequestInput.class);
- InputFactory.registerInput(MySQLInput.TYPE, MySQLInput.class);
- InputFactory.registerInput(GrpcInput.TYPE, GrpcInput.class);
- InputFactory.registerInput(DubboInput.TYPE, DubboInput.class);
Pipeline pipeline = new Pipeline();
pipeline.setApplicationContext(appContext);
@@ -213,8 +200,10 @@ public class ConfigLoader {
@PostConstruct
public synchronized void init() throws Exception {
this.refreshLocalCache();
+ InputFactory.loadInputClasses();
}
+
public synchronized void refreshLocalCache() throws Exception {
if (formalPathPrefix == null) {
formalPathPrefix = appContext.getEnvironment().getProperty("gateway.prefix", "/proxy");
@@ -372,6 +361,8 @@ public class ConfigLoader {
}
}
String key = method.toUpperCase() + ":" + path;
+ // config file entry ,if you want modify the aggregate config json but not use the interface of fizz,
+ // you can just read the config ,transform to json format and modify it
if (aggregateResources.containsKey(key) && aggregateResources.get(key) != null) {
String configStr = aggregateResources.get(key);
Input input = null;
diff --git a/fizz-core/src/main/java/we/fizz/Step.java b/fizz-core/src/main/java/we/fizz/Step.java
index 5ccaafa..015f12e 100644
--- a/fizz-core/src/main/java/we/fizz/Step.java
+++ b/fizz-core/src/main/java/we/fizz/Step.java
@@ -44,6 +44,7 @@ import we.fizz.component.IComponent;
import we.fizz.component.StepContextPosition;
import we.fizz.component.circle.Circle;
import we.fizz.component.condition.Condition;
+import we.fizz.exception.FizzRuntimeException;
import we.fizz.input.Input;
import we.fizz.input.InputConfig;
import we.fizz.input.InputContext;
diff --git a/fizz-core/src/main/java/we/fizz/component/circle/Circle.java b/fizz-core/src/main/java/we/fizz/component/circle/Circle.java
index 14b6c70..7094439 100644
--- a/fizz-core/src/main/java/we/fizz/component/circle/Circle.java
+++ b/fizz-core/src/main/java/we/fizz/component/circle/Circle.java
@@ -278,7 +278,7 @@ public class Circle implements IComponent {
ONode ctxNode = circleItemResult.ctxNode;
PathMapping.setByPath(ctxNode, stepCtxPos.getPath() + ".item", cItem.getItem(), true);
PathMapping.setByPath(ctxNode, stepCtxPos.getPath() + ".index", cItem.getIndex(), true);
-
+
if (!this.canExec(cItem.getIndex(), ctxNode, stepContext, stepCtxPos)) {
return Mono.just(new CircleItemResult(ctxNode, this.next(ctxNode), null));
}
diff --git a/fizz-core/src/main/java/we/fizz/input/IInput.java b/fizz-core/src/main/java/we/fizz/input/IInput.java
index 5709c0f..5b02c74 100644
--- a/fizz-core/src/main/java/we/fizz/input/IInput.java
+++ b/fizz-core/src/main/java/we/fizz/input/IInput.java
@@ -7,6 +7,7 @@ import we.fizz.StepContext;
import we.fizz.StepResponse;
import java.lang.ref.SoftReference;
+import java.lang.reflect.Field;
import java.util.Map;
public interface IInput {
diff --git a/fizz-core/src/main/java/we/fizz/input/Input.java b/fizz-core/src/main/java/we/fizz/input/Input.java
index a5c8ec1..f8e3952 100644
--- a/fizz-core/src/main/java/we/fizz/input/Input.java
+++ b/fizz-core/src/main/java/we/fizz/input/Input.java
@@ -17,8 +17,11 @@
package we.fizz.input;
import java.lang.ref.SoftReference;
+import java.lang.reflect.Field;
import java.util.Map;
+
+import org.reflections.Reflections;
import org.springframework.context.ConfigurableApplicationContext;
import reactor.core.publisher.Mono;
import we.fizz.Step;
@@ -95,4 +98,14 @@ public class Input {
return InputConfig.class;
}
+ public static void initialize(Class>clazz) throws IllegalAccessException {
+ Field field = null;
+ try {
+ field = clazz.getDeclaredField("TYPE");
+ InputFactory.registerInput((InputType) field.get(null), clazz);
+ } catch (NoSuchFieldException e) {
+ // doing nothing is right
+ }
+ }
+
}
diff --git a/fizz-core/src/main/java/we/fizz/input/InputFactory.java b/fizz-core/src/main/java/we/fizz/input/InputFactory.java
index c0b611b..4a269b1 100644
--- a/fizz-core/src/main/java/we/fizz/input/InputFactory.java
+++ b/fizz-core/src/main/java/we/fizz/input/InputFactory.java
@@ -18,6 +18,7 @@
package we.fizz.input;
import we.fizz.component.ComponentHelper;
+import org.reflections.Reflections;
import we.fizz.exception.FizzRuntimeException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
@@ -25,6 +26,7 @@ import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
*
@@ -61,8 +63,9 @@ public class InputFactory {
inputConfig.setComponents(ComponentHelper.buildComponents((List