diff --git a/api/pom.xml b/api/pom.xml
index d5128d57..f6186156 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -121,77 +121,6 @@
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ${project.build.directory}/checkstyle.log
- true
- true
- true
- false
- false
- ${checkstyle.logViolationsToConsole}
- ${checkstyle.failOnViolation}
-
- ${project.build.sourceDirectory}
- ${project.build.testSourceDirectory}
-
-
-
-
- compile
-
- check
-
-
-
-
-
- com.spotify.fmt
- fmt-maven-plugin
-
- src/main/java
- src/test/java
- false
- .*\.java
- false
- false
-
-
-
-
-
- format
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
-
- test-jar
-
-
-
-
diff --git a/impl/bom/pom.xml b/impl/bom/pom.xml
new file mode 100644
index 00000000..63ef0fe3
--- /dev/null
+++ b/impl/bom/pom.xml
@@ -0,0 +1,20 @@
+
+ 4.0.0
+
+ io.serverlessworkflow
+ serverlessworkflow-impl
+ 7.0.0-SNAPSHOT
+
+ serverlessworkflow-impl-bom
+ pom
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-core
+
+
+ io.serverlessworkflow
+ serverlessworkflow-impl-http
+
+
+
\ No newline at end of file
diff --git a/impl/core/.checkstyle b/impl/core/.checkstyle
new file mode 100644
index 00000000..cdd4188c
--- /dev/null
+++ b/impl/core/.checkstyle
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/impl/core/pom.xml b/impl/core/pom.xml
new file mode 100644
index 00000000..597b3758
--- /dev/null
+++ b/impl/core/pom.xml
@@ -0,0 +1,48 @@
+
+ 4.0.0
+
+ io.serverlessworkflow
+ serverlessworkflow-impl
+ 7.0.0-SNAPSHOT
+
+ serverlessworkflow-impl-core
+
+ 1.1.0
+
+
+
+ io.serverlessworkflow
+ serverlessworkflow-api
+ 7.0.0-SNAPSHOT
+
+
+ com.networknt
+ json-schema-validator
+
+
+ net.thisptr
+ jackson-jq
+ ${version.net.thisptr}
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-params
+ test
+
+
+ org.assertj
+ assertj-core
+ test
+
+
+
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/DefaultWorkflowPosition.java b/impl/core/src/main/java/io/serverlessworkflow/impl/DefaultWorkflowPosition.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/DefaultWorkflowPosition.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/DefaultWorkflowPosition.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/TaskContext.java b/impl/core/src/main/java/io/serverlessworkflow/impl/TaskContext.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/TaskContext.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/TaskContext.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowContext.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowContext.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowContext.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowContext.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowDefinition.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowDefinition.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowDefinition.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowDefinition.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowExecutionListener.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowExecutionListener.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowExecutionListener.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowExecutionListener.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowFilter.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowFilter.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowFilter.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowFilter.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowInstance.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowInstance.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowInstance.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowInstance.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowPosition.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowPosition.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowPosition.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowPosition.java
diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowState.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowState.java
new file mode 100644
index 00000000..310dbd0b
--- /dev/null
+++ b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowState.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2020-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.serverlessworkflow.impl;
+
+public enum WorkflowState {
+ STARTED,
+ WAITING,
+ COMPLETED
+}
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowUtils.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowUtils.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowUtils.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowUtils.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/AbstractTaskExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/AbstractTaskExecutor.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/executors/AbstractTaskExecutor.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/AbstractTaskExecutor.java
diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/executors/CallTaskExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/CallTaskExecutor.java
new file mode 100644
index 00000000..535057fa
--- /dev/null
+++ b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/CallTaskExecutor.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2020-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.serverlessworkflow.impl.executors;
+
+import io.serverlessworkflow.api.types.TaskBase;
+import io.serverlessworkflow.impl.TaskContext;
+import io.serverlessworkflow.impl.WorkflowContext;
+import io.serverlessworkflow.impl.WorkflowDefinition;
+
+public class CallTaskExecutor extends AbstractTaskExecutor {
+
+ private final CallableTask callable;
+
+ protected CallTaskExecutor(T task, WorkflowDefinition definition, CallableTask callable) {
+ super(task, definition);
+ this.callable = callable;
+ callable.init(task, definition);
+ }
+
+ @Override
+ protected void internalExecute(WorkflowContext workflow, TaskContext taskContext) {
+ taskContext.rawOutput(callable.apply(workflow, taskContext, taskContext.input()));
+ }
+}
diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/executors/CallableTask.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/CallableTask.java
new file mode 100644
index 00000000..ffb94912
--- /dev/null
+++ b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/CallableTask.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2020-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.serverlessworkflow.impl.executors;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import io.serverlessworkflow.api.types.TaskBase;
+import io.serverlessworkflow.impl.TaskContext;
+import io.serverlessworkflow.impl.WorkflowContext;
+import io.serverlessworkflow.impl.WorkflowDefinition;
+
+public interface CallableTask {
+ void init(T task, WorkflowDefinition definition);
+
+ JsonNode apply(WorkflowContext workflowContext, TaskContext taskContext, JsonNode input);
+
+ boolean accept(Class extends TaskBase> clazz);
+}
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/DefaultTaskExecutorFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/DefaultTaskExecutorFactory.java
similarity index 71%
rename from impl/src/main/java/io/serverlessworkflow/impl/executors/DefaultTaskExecutorFactory.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/DefaultTaskExecutorFactory.java
index 117a8ed2..8ca2feb4 100644
--- a/impl/src/main/java/io/serverlessworkflow/impl/executors/DefaultTaskExecutorFactory.java
+++ b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/DefaultTaskExecutorFactory.java
@@ -15,10 +15,13 @@
*/
package io.serverlessworkflow.impl.executors;
+import io.serverlessworkflow.api.types.CallHTTP;
import io.serverlessworkflow.api.types.CallTask;
import io.serverlessworkflow.api.types.Task;
import io.serverlessworkflow.api.types.TaskBase;
import io.serverlessworkflow.impl.WorkflowDefinition;
+import java.util.ServiceLoader;
+import java.util.ServiceLoader.Provider;
public class DefaultTaskExecutorFactory implements TaskExecutorFactory {
@@ -30,12 +33,15 @@ public static TaskExecutorFactory get() {
protected DefaultTaskExecutorFactory() {}
+ private ServiceLoader callTasks = ServiceLoader.load(CallableTask.class);
+
public TaskExecutor extends TaskBase> getTaskExecutor(
Task task, WorkflowDefinition definition) {
if (task.getCallTask() != null) {
CallTask callTask = task.getCallTask();
if (callTask.getCallHTTP() != null) {
- return new HttpExecutor(callTask.getCallHTTP(), definition);
+ return new CallTaskExecutor<>(
+ callTask.getCallHTTP(), definition, findCallTask(CallHTTP.class));
}
} else if (task.getSwitchTask() != null) {
return new SwitchExecutor(task.getSwitchTask(), definition);
@@ -46,4 +52,15 @@ public TaskExecutor extends TaskBase> getTaskExecutor(
}
throw new UnsupportedOperationException(task.get().getClass().getName() + " not supported yet");
}
+
+ @SuppressWarnings("unchecked")
+ private CallableTask findCallTask(Class clazz) {
+ return (CallableTask)
+ callTasks.stream()
+ .map(Provider::get)
+ .filter(s -> s.accept(clazz))
+ .findAny()
+ .orElseThrow(
+ () -> new UnsupportedOperationException(clazz.getName() + " not supported yet"));
+ }
}
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/DoExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/DoExecutor.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/executors/DoExecutor.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/DoExecutor.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/SetExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/SetExecutor.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/executors/SetExecutor.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/SetExecutor.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/SwitchExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/SwitchExecutor.java
similarity index 74%
rename from impl/src/main/java/io/serverlessworkflow/impl/executors/SwitchExecutor.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/SwitchExecutor.java
index 9f421acb..f081dfa4 100644
--- a/impl/src/main/java/io/serverlessworkflow/impl/executors/SwitchExecutor.java
+++ b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/SwitchExecutor.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2020-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package io.serverlessworkflow.impl.executors;
import io.serverlessworkflow.api.types.FlowDirective;
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutor.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutor.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutor.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutorFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutorFactory.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutorFactory.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutorFactory.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/Expression.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/Expression.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/expressions/Expression.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/expressions/Expression.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionFactory.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionFactory.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionFactory.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionUtils.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionUtils.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionUtils.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionUtils.java
diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionValidationException.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionValidationException.java
new file mode 100644
index 00000000..8dc1b4f2
--- /dev/null
+++ b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionValidationException.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2020-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.serverlessworkflow.impl.expressions;
+
+public class ExpressionValidationException extends RuntimeException {
+
+ private static final long serialVersionUID = 1L;
+
+ public ExpressionValidationException(String message) {
+ super(message);
+ }
+
+ public ExpressionValidationException(String message, Throwable ex) {
+ super(message, ex);
+ }
+}
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/JQExpression.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/JQExpression.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/expressions/JQExpression.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/expressions/JQExpression.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/JQExpressionFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/JQExpressionFactory.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/expressions/JQExpressionFactory.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/expressions/JQExpressionFactory.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/ProxyMap.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ProxyMap.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/expressions/ProxyMap.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ProxyMap.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/json/JsonUtils.java b/impl/core/src/main/java/io/serverlessworkflow/impl/json/JsonUtils.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/json/JsonUtils.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/json/JsonUtils.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/json/MergeUtils.java b/impl/core/src/main/java/io/serverlessworkflow/impl/json/MergeUtils.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/json/MergeUtils.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/json/MergeUtils.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidator.java b/impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidator.java
similarity index 61%
rename from impl/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidator.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidator.java
index 232926b3..d3ab3190 100644
--- a/impl/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidator.java
+++ b/impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidator.java
@@ -1,20 +1,17 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
+ * Copyright 2020-Present The Serverless Workflow Specification Authors
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
package io.serverlessworkflow.impl.jsonschema;
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidatorFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidatorFactory.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidatorFactory.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidatorFactory.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidator.java b/impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidator.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidator.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidator.java
diff --git a/impl/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidatorFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidatorFactory.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidatorFactory.java
rename to impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidatorFactory.java
diff --git a/impl/src/main/java/io/serverlessworkflow/resources/ClasspathResource.java b/impl/core/src/main/java/io/serverlessworkflow/resources/ClasspathResource.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/resources/ClasspathResource.java
rename to impl/core/src/main/java/io/serverlessworkflow/resources/ClasspathResource.java
diff --git a/impl/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoader.java b/impl/core/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoader.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoader.java
rename to impl/core/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoader.java
diff --git a/impl/core/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoaderFactory.java b/impl/core/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoaderFactory.java
new file mode 100644
index 00000000..4efddb30
--- /dev/null
+++ b/impl/core/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoaderFactory.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2020-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.serverlessworkflow.resources;
+
+import java.nio.file.Path;
+
+public class DefaultResourceLoaderFactory implements ResourceLoaderFactory {
+
+ public static final ResourceLoaderFactory get() {
+ return factory;
+ }
+
+ private static final ResourceLoaderFactory factory = new DefaultResourceLoaderFactory();
+
+ private DefaultResourceLoaderFactory() {}
+
+ @Override
+ public ResourceLoader getResourceLoader(Path path) {
+ return new DefaultResourceLoader(path);
+ }
+}
diff --git a/impl/src/main/java/io/serverlessworkflow/resources/DynamicResource.java b/impl/core/src/main/java/io/serverlessworkflow/resources/DynamicResource.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/resources/DynamicResource.java
rename to impl/core/src/main/java/io/serverlessworkflow/resources/DynamicResource.java
diff --git a/impl/src/main/java/io/serverlessworkflow/resources/FileResource.java b/impl/core/src/main/java/io/serverlessworkflow/resources/FileResource.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/resources/FileResource.java
rename to impl/core/src/main/java/io/serverlessworkflow/resources/FileResource.java
diff --git a/impl/src/main/java/io/serverlessworkflow/resources/HttpResource.java b/impl/core/src/main/java/io/serverlessworkflow/resources/HttpResource.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/resources/HttpResource.java
rename to impl/core/src/main/java/io/serverlessworkflow/resources/HttpResource.java
diff --git a/impl/src/main/java/io/serverlessworkflow/resources/ResourceLoader.java b/impl/core/src/main/java/io/serverlessworkflow/resources/ResourceLoader.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/resources/ResourceLoader.java
rename to impl/core/src/main/java/io/serverlessworkflow/resources/ResourceLoader.java
diff --git a/impl/src/main/java/io/serverlessworkflow/resources/ResourceLoaderFactory.java b/impl/core/src/main/java/io/serverlessworkflow/resources/ResourceLoaderFactory.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/resources/ResourceLoaderFactory.java
rename to impl/core/src/main/java/io/serverlessworkflow/resources/ResourceLoaderFactory.java
diff --git a/impl/src/main/java/io/serverlessworkflow/resources/StaticResource.java b/impl/core/src/main/java/io/serverlessworkflow/resources/StaticResource.java
similarity index 100%
rename from impl/src/main/java/io/serverlessworkflow/resources/StaticResource.java
rename to impl/core/src/main/java/io/serverlessworkflow/resources/StaticResource.java
diff --git a/impl/core/src/test/java/io/serverlessworkflow/impl/WorkflowDefinitionTest.java b/impl/core/src/test/java/io/serverlessworkflow/impl/WorkflowDefinitionTest.java
new file mode 100644
index 00000000..f6c3455a
--- /dev/null
+++ b/impl/core/src/test/java/io/serverlessworkflow/impl/WorkflowDefinitionTest.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2020-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.serverlessworkflow.impl;
+
+import static io.serverlessworkflow.api.WorkflowReader.readWorkflowFromClasspath;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.stream.Stream;
+import org.assertj.core.api.Condition;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+public class WorkflowDefinitionTest {
+
+ private static WorkflowApplication appl;
+
+ @BeforeAll
+ static void init() {
+ appl = WorkflowApplication.builder().build();
+ }
+
+ @ParameterizedTest
+ @MethodSource("provideParameters")
+ void testWorkflowExecution(String fileName, Object input, Condition