From 6f12cda995b2fbed7afd1bb82b7008e505208052 Mon Sep 17 00:00:00 2001 From: Francisco Javier Tirado Sarti Date: Tue, 20 Oct 2026 19:53:41 +0200 Subject: [PATCH 1/2] [Fix #1772] Document jackson dependecy. Signed-off-by: Francisco Javier Tirado Sarti --- README.md | 4 ++++ .../java/org/openworkflow/sdk/api/DirectReader.java | 9 ++++----- .../org/openworkflow/sdk/api/ValidationReader.java | 13 +++++-------- .../org/openworkflow/sdk/api/WorkflowReader.java | 7 ++----- .../sdk/api/WorkflowReaderOperations.java | 9 ++++----- .../org/openworkflow/sdk/api/WorkflowWriter.java | 4 +--- 6 files changed, 20 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 09470f349..806b900b9 100644 --- a/README.md +++ b/README.md @@ -137,6 +137,10 @@ try (OutputStream out = new FileOutputStream("simple.json")) { ``` For additional writing helper methods, check [WorkflowWriter](api/src/main/java/org/openworkflow/sdk/api/WorkflowWriter.java) class. +## Jackson dependency + +`openworkflow-api` module heavily depends on Jackson for loading the file content into a in-memory POJO. For those users that use another Json Handling library, different than Jackson, in their project, the `openworkflow-types` module contains the generated Java POJOs from the OpenWorkflow schema (without any Jakcson annotation). Using this latter module as dependency, they can build a read/writer module, equivalent to `openworkflow-api`, but using their preferred json manipulation library. + ### Reference implementation The reference implementation provides a ready-to-use runtime that supports the Open Workflow Specification. It includes a workflow execution engine, validation utilities, and illustrative examples to help you quickly test and deploy your workflows. For details on usage, configuration, and supported features, see [readme](impl/README.md). diff --git a/api/src/main/java/org/openworkflow/sdk/api/DirectReader.java b/api/src/main/java/org/openworkflow/sdk/api/DirectReader.java index 54769009d..a60a156be 100644 --- a/api/src/main/java/org/openworkflow/sdk/api/DirectReader.java +++ b/api/src/main/java/org/openworkflow/sdk/api/DirectReader.java @@ -15,7 +15,6 @@ */ package org.openworkflow.sdk.api; -import java.io.IOException; import java.io.InputStream; import java.io.Reader; import org.openworkflow.sdk.api.types.Workflow; @@ -23,22 +22,22 @@ class DirectReader implements WorkflowReaderOperations { @Override - public Workflow read(InputStream input, WorkflowFormat format) throws IOException { + public Workflow read(InputStream input, WorkflowFormat format) { return format.mapper().readValue(input, Workflow.class); } @Override - public Workflow read(Reader input, WorkflowFormat format) throws IOException { + public Workflow read(Reader input, WorkflowFormat format) { return format.mapper().readValue(input, Workflow.class); } @Override - public Workflow read(byte[] input, WorkflowFormat format) throws IOException { + public Workflow read(byte[] input, WorkflowFormat format) { return format.mapper().readValue(input, Workflow.class); } @Override - public Workflow read(String input, WorkflowFormat format) throws IOException { + public Workflow read(String input, WorkflowFormat format) { return format.mapper().readValue(input, Workflow.class); } } diff --git a/api/src/main/java/org/openworkflow/sdk/api/ValidationReader.java b/api/src/main/java/org/openworkflow/sdk/api/ValidationReader.java index a27be4ccf..89703c7d2 100644 --- a/api/src/main/java/org/openworkflow/sdk/api/ValidationReader.java +++ b/api/src/main/java/org/openworkflow/sdk/api/ValidationReader.java @@ -27,8 +27,6 @@ import java.util.Collection; import java.util.stream.Collectors; import org.openworkflow.sdk.api.types.Workflow; -import tools.jackson.core.exc.StreamReadException; -import tools.jackson.databind.DatabindException; import tools.jackson.databind.JsonNode; class ValidationReader implements WorkflowReaderOperations { @@ -48,27 +46,26 @@ class ValidationReader implements WorkflowReaderOperations { } @Override - public Workflow read(InputStream input, WorkflowFormat format) throws IOException { + public Workflow read(InputStream input, WorkflowFormat format) { return validate(format.mapper().readValue(input, JsonNode.class), format); } @Override - public Workflow read(Reader input, WorkflowFormat format) throws IOException { + public Workflow read(Reader input, WorkflowFormat format) { return validate(format.mapper().readValue(input, JsonNode.class), format); } @Override - public Workflow read(byte[] input, WorkflowFormat format) throws IOException { + public Workflow read(byte[] input, WorkflowFormat format) { return validate(format.mapper().readValue(input, JsonNode.class), format); } @Override - public Workflow read(String input, WorkflowFormat format) throws IOException { + public Workflow read(String input, WorkflowFormat format) { return validate(format.mapper().readValue(input, JsonNode.class), format); } - private Workflow validate(JsonNode value, WorkflowFormat format) - throws StreamReadException, DatabindException, IOException { + private Workflow validate(JsonNode value, WorkflowFormat format) { Collection validationErrors = schemaObject.validate(value); if (!validationErrors.isEmpty()) { throw new IllegalArgumentException( diff --git a/api/src/main/java/org/openworkflow/sdk/api/WorkflowReader.java b/api/src/main/java/org/openworkflow/sdk/api/WorkflowReader.java index 49ca9143f..7149aafcd 100644 --- a/api/src/main/java/org/openworkflow/sdk/api/WorkflowReader.java +++ b/api/src/main/java/org/openworkflow/sdk/api/WorkflowReader.java @@ -56,9 +56,8 @@ public static Workflow readWorkflow(Reader input, WorkflowFormat format) throws * @param input the byte array containing the workflow definition * @param format the workflow format * @return the parsed {@link Workflow} - * @throws IOException if an I/O error occurs */ - public static Workflow readWorkflow(byte[] input, WorkflowFormat format) throws IOException { + public static Workflow readWorkflow(byte[] input, WorkflowFormat format) { return defaultReader().read(input, format); } @@ -91,10 +90,8 @@ public static Workflow readWorkflow(Path path, WorkflowFormat format) throws IOE * @param input the string containing the workflow definition * @param format the workflow format * @return the parsed {@link Workflow} - * @throws IOException if an I/O error occurs */ - public static Workflow readWorkflowFromString(String input, WorkflowFormat format) - throws IOException { + public static Workflow readWorkflowFromString(String input, WorkflowFormat format) { return defaultReader().read(input, format); } diff --git a/api/src/main/java/org/openworkflow/sdk/api/WorkflowReaderOperations.java b/api/src/main/java/org/openworkflow/sdk/api/WorkflowReaderOperations.java index d0c2bfcc1..578156cee 100644 --- a/api/src/main/java/org/openworkflow/sdk/api/WorkflowReaderOperations.java +++ b/api/src/main/java/org/openworkflow/sdk/api/WorkflowReaderOperations.java @@ -15,17 +15,16 @@ */ package org.openworkflow.sdk.api; -import java.io.IOException; import java.io.InputStream; import java.io.Reader; import org.openworkflow.sdk.api.types.Workflow; public interface WorkflowReaderOperations { - Workflow read(InputStream input, WorkflowFormat format) throws IOException; + Workflow read(InputStream input, WorkflowFormat format); - Workflow read(Reader input, WorkflowFormat format) throws IOException; + Workflow read(Reader input, WorkflowFormat format); - Workflow read(byte[] input, WorkflowFormat format) throws IOException; + Workflow read(byte[] input, WorkflowFormat format); - Workflow read(String input, WorkflowFormat format) throws IOException; + Workflow read(String input, WorkflowFormat format); } diff --git a/api/src/main/java/org/openworkflow/sdk/api/WorkflowWriter.java b/api/src/main/java/org/openworkflow/sdk/api/WorkflowWriter.java index b808dfb8b..1c8e77723 100644 --- a/api/src/main/java/org/openworkflow/sdk/api/WorkflowWriter.java +++ b/api/src/main/java/org/openworkflow/sdk/api/WorkflowWriter.java @@ -91,10 +91,8 @@ public static void writeWorkflow(Path output, Workflow workflow, WorkflowFormat * @param workflow the workflow object to serialize * @param format the format to use (JSON or YAML) * @return the serialized workflow as a string - * @throws IOException if an error occurs during serialization */ - public static String workflowAsString(Workflow workflow, WorkflowFormat format) - throws IOException { + public static String workflowAsString(Workflow workflow, WorkflowFormat format) { return format.mapper().writeValueAsString(workflow); } From 029aaa15abeb563c5318355de5801597a03c6b59 Mon Sep 17 00:00:00 2001 From: Francisco Javier Tirado Sarti Date: Tue, 20 Oct 2026 20:18:56 +0200 Subject: [PATCH 2/2] Revise Jackson dependency section in README Clarified the Jackson dependency information and improved readability. Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Francisco Javier Tirado Sarti --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 806b900b9..cb516899c 100644 --- a/README.md +++ b/README.md @@ -139,7 +139,7 @@ For additional writing helper methods, check [WorkflowWriter](api/src/main/java/ ## Jackson dependency -`openworkflow-api` module heavily depends on Jackson for loading the file content into a in-memory POJO. For those users that use another Json Handling library, different than Jackson, in their project, the `openworkflow-types` module contains the generated Java POJOs from the OpenWorkflow schema (without any Jakcson annotation). Using this latter module as dependency, they can build a read/writer module, equivalent to `openworkflow-api`, but using their preferred json manipulation library. +The `openworkflow-api` module depends heavily on Jackson for loading file content into an in-memory POJO. For users who use a JSON handling library other than Jackson, the `openworkflow-types` module contains Java POJOs generated from the OpenWorkflow schema without any Jackson annotations. Using this module as a dependency, they can build a reader/writer module equivalent to `openworkflow-api` with their preferred JSON library. ### Reference implementation