diff --git a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/variables/JsonHolder.java b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/variables/JsonHolder.java index 92ea7188c..f747eda08 100644 --- a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/variables/JsonHolder.java +++ b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/variables/JsonHolder.java @@ -19,19 +19,33 @@ public class JsonHolder { - private final String dataClassName; - private final byte[] data; - /** * @param dataClassName * not null * @param data * not null + * @return */ - public JsonHolder(String dataClassName, byte[] data) + public static JsonHolder of(String dataClassName, byte[] data) + { + Objects.requireNonNull(dataClassName, "dataClassName"); + Objects.requireNonNull(data, "data"); + + return new JsonHolder(dataClassName, data); + } + + public static JsonHolder empty() + { + return new JsonHolder(null, null); + } + + private final String dataClassName; + private final byte[] data; + + private JsonHolder(String dataClassName, byte[] data) { - this.dataClassName = Objects.requireNonNull(dataClassName, "dataClassName"); - this.data = Objects.requireNonNull(data, "data"); + this.dataClassName = dataClassName; + this.data = data; } public String getDataClassName() @@ -43,4 +57,9 @@ public byte[] getData() { return data; } + + public boolean isEmpty() + { + return dataClassName == null || data == null; + } } diff --git a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/variables/JsonHolderSerializer.java b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/variables/JsonHolderSerializer.java index 12e55449f..45caed302 100644 --- a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/variables/JsonHolderSerializer.java +++ b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/variables/JsonHolderSerializer.java @@ -52,7 +52,8 @@ public JsonHolderValue readValue(ValueFields valueFields, boolean asTransientVal String dataClassName = valueFields.getTextValue(); byte[] data = valueFields.getByteArrayValue(); - return JsonHolderValues.create(new JsonHolder(dataClassName, data)); + return JsonHolderValues.create( + dataClassName == null || data == null ? JsonHolder.empty() : JsonHolder.of(dataClassName, data)); } @Override diff --git a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/variables/VariablesImpl.java b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/variables/VariablesImpl.java index 65278619f..06a0e0e2b 100644 --- a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/variables/VariablesImpl.java +++ b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/variables/VariablesImpl.java @@ -107,12 +107,15 @@ public VariablesImpl(DelegateExecution execution, ObjectMapper objectMapper, Dsf private JsonHolder toJsonHolder(Object json) { + if (json == null) + return JsonHolder.empty(); + try { byte[] data = objectMapper.writeValueAsBytes(json); String dataClassName = json.getClass().getName(); - return new JsonHolder(dataClassName, data); + return JsonHolder.of(dataClassName, data); } catch (JsonProcessingException e) { @@ -123,11 +126,15 @@ private JsonHolder toJsonHolder(Object json) @SuppressWarnings("unchecked") private T fromJsonHolder(JsonHolder holder) { + if (holder.isEmpty()) + return null; + try { byte[] data = holder.getData(); - Class dataClass = getClassLoader().loadClass(holder.getDataClassName()); + String dataClassName = holder.getDataClassName(); + Class dataClass = getClassLoader().loadClass(dataClassName); return (T) objectMapper.readValue(data, dataClass); } catch (ClassNotFoundException | IOException e) diff --git a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/JsonVariableTestGet.java b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/JsonVariableTestGet.java index 638db9972..7514efebc 100644 --- a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/JsonVariableTestGet.java +++ b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/JsonVariableTestGet.java @@ -16,6 +16,7 @@ package dev.dsf.bpe.test.service; import static dev.dsf.bpe.test.PluginTestExecutor.expectNotNull; +import static dev.dsf.bpe.test.PluginTestExecutor.expectNull; import static dev.dsf.bpe.test.PluginTestExecutor.expectSame; import dev.dsf.bpe.test.AbstractTest; @@ -62,4 +63,12 @@ public void getIntegerVariable(Variables variables) throws Exception expectNotNull(variable); expectSame(JsonVariableTestSet.TEST_INTEGER, variable); } + + @PluginTest + public void getJsonNullVariable(Variables variables) throws Exception + { + JsonPojo variable = variables.getVariable(JsonVariableTestSet.JSON_NULL_VARIABLE); + + expectNull(variable); + } } diff --git a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/JsonVariableTestSet.java b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/JsonVariableTestSet.java index fe0564455..82d2668f6 100644 --- a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/JsonVariableTestSet.java +++ b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/JsonVariableTestSet.java @@ -26,6 +26,7 @@ public class JsonVariableTestSet implements ServiceTask { public static final String JSON_VARIABLE = "json-variable"; + public static final String JSON_NULL_VARIABLE = "json-null-variable"; public static final String STRING_VARIABLE = "string-variable"; public static final String INTEGER_VARIABLE = "integer-variable"; @@ -41,5 +42,6 @@ public void execute(ProcessPluginApi api, Variables variables) throws ErrorBound variables.setJsonVariable(JSON_VARIABLE, new JsonPojo(TEST_VALUE_1, TEST_VALUE_2, TEST_ZONED_DATE_TIME_VALUE)); variables.setString(STRING_VARIABLE, TEST_STRING); variables.setInteger(INTEGER_VARIABLE, TEST_INTEGER); + variables.setJsonVariable(JSON_NULL_VARIABLE, null); } }