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);
}
}