Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,33 @@

public class JsonHolder
{
private final String dataClassName;
private final byte[] data;

/**
* @param dataClassName
* not <code>null</code>
* @param data
* not <code>null</code>
* @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()
Expand All @@ -43,4 +57,9 @@ public byte[] getData()
{
return data;
}

public boolean isEmpty()
{
return dataClassName == null || data == null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -123,11 +126,15 @@ private JsonHolder toJsonHolder(Object json)
@SuppressWarnings("unchecked")
private <T> 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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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";

Expand All @@ -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);
}
}
Loading