diff --git a/functions-framework-api/pom.xml b/functions-framework-api/pom.xml index f81be26a..279cc849 100644 --- a/functions-framework-api/pom.xml +++ b/functions-framework-api/pom.xml @@ -13,156 +13,164 @@ See the License for the specific language governing permissions and limitations under the License. --> - - 4.0.0 - - - io.cloudevents - cloudevents-api - 2.3.0 - compile - - + + 4.0.0 + + + io.cloudevents + cloudevents-api + 2.4.2 + compile + + + io.dapr + dapr-sdk + 1.8.0 + + - - org.sonatype.oss - oss-parent - 9 - + + org.sonatype.oss + oss-parent + 9 + - dev.openfunction.functions - functions-framework-api - 1.1.0-SNAPSHOT + dev.openfunction.functions + functions-framework-api + 1.1.0-SNAPSHOT - - UTF-8 - 3.8.0 - 3.1.0 - 5.3.2 - + + UTF-8 + 3.8.0 + 3.1.0 + 5.3.2 + - - - Apache License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - + + + Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 11 - 11 - - - - org.apache.maven.plugins - maven-javadoc-plugin - ${maven-javadoc-plugin.version} - - - org.apache.maven.plugins - maven-source-plugin - 3.2.1 - - - attach-sources - - jar - - - - - - org.apache.maven.plugins - maven-release-plugin - 2.5.3 - - - default - - perform - - - functions-framework-api/pom.xml - - - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.7 - true - - ossrh - https://s01.oss.sonatype.org/ - true - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.5 - - - sign-artifacts - verify - - sign - - - - --pinentry-mode - loopback - - - - - - - - - - maven-javadoc-plugin - ${maven-javadoc-plugin.version} - - true - true - UTF-8 - UTF-8 - UTF-8 - - -XDignore.symbol.file - - true - 8 - false - - - - attach-docs - post-integration-test - jar - - - - - - - - - ossrh - https://s01.oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ - - + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 11 + 11 + + + + org.apache.maven.plugins + maven-javadoc-plugin + ${maven-javadoc-plugin.version} + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.3 + + + default + + perform + + + functions-framework-api/pom.xml + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + ossrh + https://s01.oss.sonatype.org/ + true + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + --pinentry-mode + loopback + + + + + + + + + + maven-javadoc-plugin + ${maven-javadoc-plugin.version} + + true + true + UTF-8 + UTF-8 + UTF-8 + + -XDignore.symbol.file + + true + 8 + false + + + + attach-docs + post-integration-test + + jar + + + + + + + + + + ossrh + https://s01.oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ + + diff --git a/functions-framework-api/src/main/java/dev/openfunction/functions/Context.java b/functions-framework-api/src/main/java/dev/openfunction/functions/Context.java index d091d255..b75b4280 100644 --- a/functions-framework-api/src/main/java/dev/openfunction/functions/Context.java +++ b/functions-framework-api/src/main/java/dev/openfunction/functions/Context.java @@ -17,6 +17,7 @@ package dev.openfunction.functions; import io.cloudevents.CloudEvent; +import io.dapr.client.DaprClient; import java.util.Map; @@ -95,4 +96,13 @@ public interface Context { * @return Outputs */ Map getOutputs(); + + /** + * getDaprClient return a dapr client, so that use user + * can call the dapr API directly. + * Be carefully, the dapr client maybe null; + * + * @return Dapr client + */ + DaprClient getDaprClient(); } diff --git a/functions-framework-api/src/main/java/dev/openfunction/functions/Routable.java b/functions-framework-api/src/main/java/dev/openfunction/functions/Routable.java index 6f08659a..b43b9125 100644 --- a/functions-framework-api/src/main/java/dev/openfunction/functions/Routable.java +++ b/functions-framework-api/src/main/java/dev/openfunction/functions/Routable.java @@ -4,12 +4,12 @@ * An object that can route the specified http request to the specified function. */ public abstract class Routable { - private static final String METHOD_DELETE = "DELETE"; - private static final String METHOD_HEAD = "HEAD"; - private static final String METHOD_GET = "GET"; - private static final String METHOD_PATCH = "PATCH"; - private static final String METHOD_POST = "POST"; - private static final String METHOD_PUT = "PUT"; + public static final String METHOD_DELETE = "DELETE"; + public static final String METHOD_HEAD = "HEAD"; + public static final String METHOD_GET = "GET"; + public static final String METHOD_PATCH = "PATCH"; + public static final String METHOD_POST = "POST"; + public static final String METHOD_PUT = "PUT"; /** * Get the supported http methods. diff --git a/functions-framework-invoker/pom.xml b/functions-framework-invoker/pom.xml index ddeb6830..4d199883 100644 --- a/functions-framework-invoker/pom.xml +++ b/functions-framework-invoker/pom.xml @@ -191,6 +191,11 @@ commons-beanutils 1.9.4 + + com.fasterxml.jackson.core + jackson-databind + 2.14.2 + diff --git a/functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/FunctionContext.java b/functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/FunctionContext.java index 8561bf46..b4c1e530 100644 --- a/functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/FunctionContext.java +++ b/functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/FunctionContext.java @@ -26,6 +26,7 @@ class FunctionContext { private String version; private Map inputs; private Map outputs; + private Map states; private String runtime; private String port; @@ -108,4 +109,12 @@ public void setPluginsTracing(TracingConfig pluginsTracing) { public boolean isTracingEnabled() { return pluginsTracing != null && pluginsTracing.isEnabled(); } + + public Map getStates() { + return states; + } + + public void setStates(Map states) { + this.states = states; + } } diff --git a/functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/RuntimeContext.java b/functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/RuntimeContext.java index 807a6d22..2b458644 100644 --- a/functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/RuntimeContext.java +++ b/functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/RuntimeContext.java @@ -16,8 +16,7 @@ package dev.openfunction.invoker.context; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import com.fasterxml.jackson.databind.ObjectMapper; import dev.openfunction.functions.*; import dev.openfunction.invoker.Callback; import dev.openfunction.invoker.runtime.JsonEventFormat; @@ -36,7 +35,6 @@ public class RuntimeContext { private static final Logger logger = Logger.getLogger("dev.openfunction.invoker"); - private static final Gson GSON = new GsonBuilder().serializeNulls().create(); static final String PodNameEnvName = "POD_NAME"; static final String PodNamespaceEnvName = "POD_NAMESPACE"; @@ -54,7 +52,7 @@ public class RuntimeContext { private TracingProvider tracingProvider; public RuntimeContext(String context, ClassLoader classLoader) throws Exception { - functionContext = GSON.getAdapter(FunctionContext.class).fromJson(context); + functionContext = new ObjectMapper().readValue(context, FunctionContext.class); prePlugins = new HashMap<>(); postPlugins = new HashMap<>(); @@ -140,6 +138,10 @@ public Map getOutputs() { return functionContext.getOutputs(); } + public Map getStates() { + return functionContext.getStates(); + } + public TracingProvider getTracingProvider() { return tracingProvider; } diff --git a/functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/UserContext.java b/functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/UserContext.java index d0f39e11..e8ed83b3 100644 --- a/functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/UserContext.java +++ b/functions-framework-invoker/src/main/java/dev/openfunction/invoker/context/UserContext.java @@ -167,6 +167,11 @@ public Map getOutputs() { return runtimeContext.getOutputs(); } + @Override + public DaprClient getDaprClient() { + return daprClient; + } + public Map getInputs() { return runtimeContext.getInputs(); } @@ -232,7 +237,7 @@ public void executeFunction(CloudEventFunction function, CloudEvent event) throw Error err = function.accept(UserContext.this, event); if (err == null) { httpResponse.setStatusCode(HttpServletResponse.SC_OK); - httpResponse.getOutputStream().write("Success".getBytes()); + httpResponse.getOutputStream().write(out == null || out.getData() == null ? "Success".getBytes() : out.getData().array()); } else { httpResponse.setStatusCode(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); httpResponse.getOutputStream().write(err.getMessage().getBytes()); @@ -248,7 +253,7 @@ public void executeFunction(OpenFunction function, String payload) throws Except if (httpResponse != null) { if (out == null || out.getError() == null) { httpResponse.setStatusCode(HttpServletResponse.SC_OK); - httpResponse.getOutputStream().write("Success".getBytes()); + httpResponse.getOutputStream().write(out == null || out.getData() == null ? "Success".getBytes() : out.getData().array()); } else { httpResponse.setStatusCode(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); httpResponse.getOutputStream().write(out.getError().getMessage().getBytes()); diff --git a/functions-framework-invoker/src/main/java/dev/openfunction/invoker/runtime/SynchronizeRuntime.java b/functions-framework-invoker/src/main/java/dev/openfunction/invoker/runtime/SynchronizeRuntime.java index e2369f65..6c273e02 100644 --- a/functions-framework-invoker/src/main/java/dev/openfunction/invoker/runtime/SynchronizeRuntime.java +++ b/functions-framework-invoker/src/main/java/dev/openfunction/invoker/runtime/SynchronizeRuntime.java @@ -62,7 +62,8 @@ public SynchronizeRuntime(RuntimeContext runtimeContext, Class[] functionClas @Override public void start() throws Exception { if ((runtimeContext.getInputs() != null && !runtimeContext.getInputs().isEmpty()) || - (runtimeContext.getOutputs() != null && !runtimeContext.getOutputs().isEmpty())) { + (runtimeContext.getOutputs() != null && !runtimeContext.getOutputs().isEmpty()) || + (runtimeContext.getStates() != null && !runtimeContext.getStates().isEmpty())) { daprClient = new DaprClientBuilder().build(); daprClient.waitForSidecar(Runtime.WaitDaprSidecarTimeout); } diff --git a/samples/pom.xml b/samples/pom.xml index abab19d6..25d4ad38 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -33,6 +33,11 @@ functions-framework-api 1.1.0-SNAPSHOT + + com.google.code.gson + gson + 2.10.1 +