use of org.camunda.bpm.engine.variable.value.ObjectValue in project camunda-bpm-platform by camunda.
the class MessageCorrelationTest method testMessageStartEventCorrelationSetSerializedVariableValue.
@Deployment(resources = "org/camunda/bpm/engine/test/api/runtime/MessageCorrelationTest.testMessageStartEventCorrelation.bpmn20.xml")
@Test
public void testMessageStartEventCorrelationSetSerializedVariableValue() throws IOException, ClassNotFoundException {
// when
FailingJavaSerializable javaSerializable = new FailingJavaSerializable("foo");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
new ObjectOutputStream(baos).writeObject(javaSerializable);
String serializedObject = StringUtil.fromBytes(Base64.encodeBase64(baos.toByteArray()), engineRule.getProcessEngine());
// then it is not possible to deserialize the object
try {
new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())).readObject();
} catch (RuntimeException e) {
testRule.assertTextPresent("Exception while deserializing object.", e.getMessage());
}
// but it can be set as a variable:
runtimeService.createMessageCorrelation("newInvoiceMessage").setVariable("var", Variables.serializedObjectValue(serializedObject).objectTypeName(FailingJavaSerializable.class.getName()).serializationDataFormat(SerializationDataFormats.JAVA).create()).correlate();
// then
ProcessInstance startedInstance = runtimeService.createProcessInstanceQuery().singleResult();
assertNotNull(startedInstance);
ObjectValue variableTyped = runtimeService.getVariableTyped(startedInstance.getId(), "var", false);
assertNotNull(variableTyped);
assertFalse(variableTyped.isDeserialized());
assertEquals(serializedObject, variableTyped.getValueSerialized());
assertEquals(FailingJavaSerializable.class.getName(), variableTyped.getObjectTypeName());
assertEquals(SerializationDataFormats.JAVA.getName(), variableTyped.getSerializationDataFormat());
}
use of org.camunda.bpm.engine.variable.value.ObjectValue in project camunda-bpm-platform by camunda.
the class MessageCorrelationTest method testExecutionCorrelationSetSerializedVariableValue.
@Deployment(resources = "org/camunda/bpm/engine/test/api/runtime/MessageCorrelationTest.testCatchingMessageEventCorrelation.bpmn20.xml")
@Test
public void testExecutionCorrelationSetSerializedVariableValue() throws IOException, ClassNotFoundException {
// given
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("process");
// when
FailingJavaSerializable javaSerializable = new FailingJavaSerializable("foo");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
new ObjectOutputStream(baos).writeObject(javaSerializable);
String serializedObject = StringUtil.fromBytes(Base64.encodeBase64(baos.toByteArray()), engineRule.getProcessEngine());
// then it is not possible to deserialize the object
try {
new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())).readObject();
} catch (RuntimeException e) {
testRule.assertTextPresent("Exception while deserializing object.", e.getMessage());
}
// but it can be set as a variable:
runtimeService.createMessageCorrelation("newInvoiceMessage").setVariable("var", Variables.serializedObjectValue(serializedObject).objectTypeName(FailingJavaSerializable.class.getName()).serializationDataFormat(SerializationDataFormats.JAVA).create()).correlate();
// then
ObjectValue variableTyped = runtimeService.getVariableTyped(processInstance.getId(), "var", false);
assertNotNull(variableTyped);
assertFalse(variableTyped.isDeserialized());
assertEquals(serializedObject, variableTyped.getValueSerialized());
assertEquals(FailingJavaSerializable.class.getName(), variableTyped.getObjectTypeName());
assertEquals(SerializationDataFormats.JAVA.getName(), variableTyped.getSerializationDataFormat());
}
use of org.camunda.bpm.engine.variable.value.ObjectValue in project camunda-bpm-platform by camunda.
the class TaskVariablesTest method testTaskExecutionVariables.
@Deployment
public void testTaskExecutionVariables() {
String processInstanceId = runtimeService.startProcessInstanceByKey("oneTaskProcess").getId();
String taskId = taskService.createTaskQuery().singleResult().getId();
Map<String, Object> expectedVariables = new HashMap<String, Object>();
assertEquals(expectedVariables, runtimeService.getVariables(processInstanceId));
assertEquals(expectedVariables, taskService.getVariables(taskId));
assertEquals(expectedVariables, runtimeService.getVariablesLocal(processInstanceId));
assertEquals(expectedVariables, taskService.getVariablesLocal(taskId));
runtimeService.setVariable(processInstanceId, "instrument", "trumpet");
expectedVariables = new HashMap<String, Object>();
assertEquals(expectedVariables, taskService.getVariablesLocal(taskId));
expectedVariables.put("instrument", "trumpet");
assertEquals(expectedVariables, runtimeService.getVariables(processInstanceId));
assertEquals(expectedVariables, taskService.getVariables(taskId));
assertEquals(expectedVariables, runtimeService.getVariablesLocal(processInstanceId));
taskService.setVariable(taskId, "player", "gonzo");
expectedVariables = new HashMap<String, Object>();
assertEquals(expectedVariables, taskService.getVariablesLocal(taskId));
expectedVariables.put("player", "gonzo");
expectedVariables.put("instrument", "trumpet");
assertEquals(expectedVariables, runtimeService.getVariables(processInstanceId));
assertEquals(expectedVariables, taskService.getVariables(taskId));
assertEquals(expectedVariables, runtimeService.getVariablesLocal(processInstanceId));
assertEquals(expectedVariables, runtimeService.getVariablesLocal(processInstanceId, null));
assertEquals(expectedVariables, runtimeService.getVariablesLocalTyped(processInstanceId, null, true));
taskService.setVariableLocal(taskId, "budget", "unlimited");
expectedVariables = new HashMap<String, Object>();
expectedVariables.put("budget", "unlimited");
assertEquals(expectedVariables, taskService.getVariablesLocal(taskId));
assertEquals(expectedVariables, taskService.getVariablesLocalTyped(taskId, true));
expectedVariables.put("player", "gonzo");
expectedVariables.put("instrument", "trumpet");
assertEquals(expectedVariables, taskService.getVariables(taskId));
assertEquals(expectedVariables, taskService.getVariablesTyped(taskId, true));
assertEquals(expectedVariables, taskService.getVariables(taskId, null));
assertEquals(expectedVariables, taskService.getVariablesTyped(taskId, null, true));
expectedVariables = new HashMap<String, Object>();
expectedVariables.put("player", "gonzo");
expectedVariables.put("instrument", "trumpet");
assertEquals(expectedVariables, runtimeService.getVariables(processInstanceId));
assertEquals(expectedVariables, runtimeService.getVariablesLocal(processInstanceId));
// typed variable API
ArrayList<String> serializableValue = new ArrayList<String>();
serializableValue.add("1");
serializableValue.add("2");
taskService.setVariable(taskId, "objectVariable", objectValue(serializableValue).create());
ArrayList<String> serializableValueLocal = new ArrayList<String>();
serializableValueLocal.add("3");
serializableValueLocal.add("4");
taskService.setVariableLocal(taskId, "objectVariableLocal", objectValue(serializableValueLocal).create());
Object value = taskService.getVariable(taskId, "objectVariable");
assertEquals(serializableValue, value);
Object valueLocal = taskService.getVariableLocal(taskId, "objectVariableLocal");
assertEquals(serializableValueLocal, valueLocal);
ObjectValue typedValue = taskService.getVariableTyped(taskId, "objectVariable");
assertEquals(serializableValue, typedValue.getValue());
ObjectValue serializedValue = taskService.getVariableTyped(taskId, "objectVariable", false);
assertFalse(serializedValue.isDeserialized());
ObjectValue typedValueLocal = taskService.getVariableLocalTyped(taskId, "objectVariableLocal");
assertEquals(serializableValueLocal, typedValueLocal.getValue());
ObjectValue serializedValueLocal = taskService.getVariableLocalTyped(taskId, "objectVariableLocal", false);
assertFalse(serializedValueLocal.isDeserialized());
try {
StringValue val = taskService.getVariableTyped(taskId, "objectVariable");
fail("expected exception");
} catch (ClassCastException e) {
// happy path
}
}
use of org.camunda.bpm.engine.variable.value.ObjectValue in project camunda-bpm-platform by camunda.
the class JavaSerializationProhibitedTest method testSetJavaObject.
// still works for normal objects (not serialized)
@Test
@Deployment(resources = ONE_TASK_PROCESS)
public void testSetJavaObject() throws Exception {
ProcessInstance instance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
JavaSerializable javaSerializable = new JavaSerializable("foo");
runtimeService.setVariable(instance.getId(), "simpleBean", objectValue(javaSerializable).serializationDataFormat(JAVA_DATA_FORMAT).create());
// validate untyped value
JavaSerializable value = (JavaSerializable) runtimeService.getVariable(instance.getId(), "simpleBean");
assertEquals(javaSerializable, value);
// validate typed value
ObjectValue typedValue = runtimeService.getVariableTyped(instance.getId(), "simpleBean");
assertObjectValueDeserialized(typedValue, javaSerializable);
assertObjectValueSerializedJava(typedValue, javaSerializable);
}
use of org.camunda.bpm.engine.variable.value.ObjectValue in project camunda-bpm-platform by camunda.
the class MessageIntermediateEventTest method testSetSerializedVariableValues.
@Deployment(resources = "org/camunda/bpm/engine/test/bpmn/event/message/MessageIntermediateEventTest.testSingleIntermediateMessageEvent.bpmn20.xml")
@Test
public void testSetSerializedVariableValues() throws IOException, ClassNotFoundException {
// given
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("process");
EventSubscription messageEventSubscription = runtimeService.createEventSubscriptionQuery().singleResult();
// when
FailingJavaSerializable javaSerializable = new FailingJavaSerializable("foo");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
new ObjectOutputStream(baos).writeObject(javaSerializable);
String serializedObject = StringUtil.fromBytes(Base64.encodeBase64(baos.toByteArray()), engineRule.getProcessEngine());
// then it is not possible to deserialize the object
try {
new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())).readObject();
} catch (RuntimeException e) {
testRule.assertTextPresent("Exception while deserializing object.", e.getMessage());
}
// but it can be set as a variable when delivering a message:
runtimeService.messageEventReceived("newInvoiceMessage", messageEventSubscription.getExecutionId(), Variables.createVariables().putValueTyped("var", Variables.serializedObjectValue(serializedObject).objectTypeName(FailingJavaSerializable.class.getName()).serializationDataFormat(SerializationDataFormats.JAVA).create()));
// then
ObjectValue variableTyped = runtimeService.getVariableTyped(processInstance.getId(), "var", false);
assertNotNull(variableTyped);
assertFalse(variableTyped.isDeserialized());
assertEquals(serializedObject, variableTyped.getValueSerialized());
assertEquals(FailingJavaSerializable.class.getName(), variableTyped.getObjectTypeName());
assertEquals(SerializationDataFormats.JAVA.getName(), variableTyped.getSerializationDataFormat());
}
Aggregations