protected boolean isDeserializedObjectValue(TypedValue value) { return value instanceof ObjectValue && ((ObjectValue) value).isDeserialized(); }
public boolean isMutableValue(ObjectValue typedValue) { return typedValue.isDeserialized(); }
protected boolean isDeserializedObjectValue(TypedValue value) { return value instanceof ObjectValue && ((ObjectValue) value).isDeserialized(); }
public boolean isMutableValue(ObjectValue typedValue) { return typedValue.isDeserialized(); }
public TypedValueSerializer<?> getSerializer(TypedValue value) { if (value instanceof ObjectValue) { ObjectValue objectValue = (ObjectValue) value; if (objectValue.getSerializationDataFormat() != null && !objectValue.isDeserialized()) { return new FallbackSpinObjectValueSerializer(objectValue.getSerializationDataFormat()); } } return null; } }
protected String getObjectTypeName(ObjectValue value, ValueFields valueFields) { String objectTypeName = value.getObjectTypeName(); if (objectTypeName == null && !value.isDeserialized() && value.getValueSerialized() != null) { throw new ProcessEngineException("Cannot write serialized value for variable '" + valueFields.getName() + "': no 'objectTypeName' provided for non-null value."); } // update type name if the object is deserialized if (value.isDeserialized() && value.getValue() != null) { objectTypeName = getTypeNameForDeserialized(value.getValue()); } return objectTypeName; }
protected String getObjectTypeName(ObjectValue value, ValueFields valueFields) { String objectTypeName = value.getObjectTypeName(); if (objectTypeName == null && !value.isDeserialized() && value.getValueSerialized() != null) { throw new ProcessEngineException("Cannot write serialized value for variable '" + valueFields.getName() + "': no 'objectTypeName' provided for non-null value."); } // update type name if the object is deserialized if (value.isDeserialized() && value.getValue() != null) { objectTypeName = getTypeNameForDeserialized(value.getValue()); } return objectTypeName; }
protected <T extends VariableInstance> T build(T mockVariable) { when(mockVariable.getId()).thenReturn(id); when(mockVariable.getName()).thenReturn(name); when(mockVariable.getTypeName()).thenReturn(typedValue.getType().getName()); if (ObjectValue.class.isAssignableFrom(typedValue.getClass())) { ObjectValue objectValue = (ObjectValue) typedValue; if (objectValue.isDeserialized()) { when(mockVariable.getValue()).thenReturn(typedValue.getValue()); } else { when(mockVariable.getValue()).thenReturn(null); } } else { when(mockVariable.getValue()).thenReturn(typedValue.getValue()); } when(mockVariable.getTypedValue()).thenReturn(typedValue); when(mockVariable.getProcessInstanceId()).thenReturn(processInstanceId); when(mockVariable.getExecutionId()).thenReturn(executionId); when(mockVariable.getCaseInstanceId()).thenReturn(caseInstanceId); when(mockVariable.getCaseExecutionId()).thenReturn(caseExecutionId); when(mockVariable.getTaskId()).thenReturn(taskId); when(mockVariable.getActivityInstanceId()).thenReturn(activityInstanceId); when(mockVariable.getTenantId()).thenReturn(tenantId); when(mockVariable.getErrorMessage()).thenReturn(errorMessage); return mockVariable; }
if (objectValue.isDeserialized()) { when(mockVariable.getValue()).thenReturn(value.getValue()); } else {
public static MockObjectValue fromObjectValue(ObjectValue objectValue) { MockObjectValue result = new MockObjectValue(objectValue.getValue()); result.isDeserialized = objectValue.isDeserialized(); result.objectTypeName = objectValue.getObjectTypeName(); result.serializationDataFormat = objectValue.getSerializationDataFormat(); result.serializedValue = objectValue.getValueSerialized(); result.type = objectValue.getType(); return result; }
public static void assertObjectValueDeserialized(ObjectValue typedValue, Object value) { Class<? extends Object> expectedObjectType = value.getClass(); assertTrue(typedValue.isDeserialized()); assertEquals(ValueType.OBJECT, typedValue.getType()); assertEquals(value, typedValue.getValue()); assertEquals(value, typedValue.getValue(expectedObjectType)); assertEquals(expectedObjectType, typedValue.getObjectType()); assertEquals(expectedObjectType.getName(), typedValue.getObjectTypeName()); }
private void testVariablesWithoutDeserialization(String processDefinitionKey) throws Exception { //given serializable variable JavaSerializable javaSerializable = new JavaSerializable("foo"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); new ObjectOutputStream(baos).writeObject(javaSerializable); String serializedObject = StringUtil.fromBytes(Base64.encodeBase64(baos.toByteArray()), engineRule.getProcessEngine()); //when execute process with serialized variable and wait state ProcessInstanceWithVariables procInstance = engineRule.getRuntimeService() .createProcessInstanceByKey(processDefinitionKey) .setVariable("serializedVar", serializedObjectValue(serializedObject) .serializationDataFormat(Variables.SerializationDataFormats.JAVA) .objectTypeName(JavaSerializable.class.getName()) .create()) .executeWithVariablesInReturn(false, false); //then returned instance contains serialized variable VariableMap map = procInstance.getVariables(); assertNotNull(map); ObjectValue serializedVar = (ObjectValue) map.getValueTyped("serializedVar"); assertFalse(serializedVar.isDeserialized()); assertObjectValueSerializedJava(serializedVar, javaSerializable); //access on value should fail because variable is not deserialized try { serializedVar.getValue(); Assert.fail("Deserialization should fail!"); } catch (IllegalStateException ise) { assertTrue(ise.getMessage().equals("Object is not deserialized.")); } }
assertFalse(variableTyped.isDeserialized()); assertEquals(serializedObject, variableTyped.getValueSerialized()); assertEquals(FailingJavaSerializable.class.getName(), variableTyped.getObjectTypeName());
assertFalse(variableTyped.isDeserialized()); assertEquals(serializedObject, variableTyped.getValueSerialized()); assertEquals(FailingJavaSerializable.class.getName(), variableTyped.getObjectTypeName());
public static void assertObjectValueSerializedNull(ObjectValue typedValue) { assertNotNull(typedValue); assertFalse(typedValue.isDeserialized()); assertNotNull(typedValue.getSerializationDataFormat()); assertNull(typedValue.getValueSerialized()); assertNull(typedValue.getObjectTypeName()); }
public void testDisableCustomObjectDeserialization() { // given Task newTask = taskService.newTask(); taskService.saveTask(newTask); Map<String, Object> variables = new HashMap<String, Object>(); variables.put("customSerializable", new CustomSerializable()); variables.put("failingSerializable", new FailingSerializable()); taskService.setVariables(newTask.getId(), variables); // when List<HistoricVariableInstance> variableInstances = historyService.createHistoricVariableInstanceQuery() .disableCustomObjectDeserialization() .list(); // then assertEquals(2, variableInstances.size()); for (HistoricVariableInstance variableInstance : variableInstances) { assertNull(variableInstance.getErrorMessage()); ObjectValue typedValue = (ObjectValue) variableInstance.getTypedValue(); assertNotNull(typedValue); assertFalse(typedValue.isDeserialized()); // cannot access the deserialized value try { typedValue.getValue(); } catch(IllegalStateException e) { assertTextPresent("Object is not deserialized", e.getMessage()); } assertNotNull(typedValue.getValueSerialized()); } taskService.deleteTask(newTask.getId(), true); }
assertFalse(typedValue.isDeserialized());
assertFalse(typedValue.isDeserialized());
public static void assertObjectValueDeserializedNull(ObjectValue typedValue) { assertNotNull(typedValue); assertTrue(typedValue.isDeserialized()); assertNotNull(typedValue.getSerializationDataFormat()); assertNull(typedValue.getValue()); assertNull(typedValue.getValueSerialized()); assertNull(typedValue.getObjectType()); assertNull(typedValue.getObjectTypeName()); }
@Test @Deployment(resources = ONE_TASK_PROCESS) public void testSetJavaObjectNullSerializedObjectTypeName() throws Exception { ProcessInstance instance = runtimeService.startProcessInstanceByKey("oneTaskProcess"); String typeName = "some.type.Name"; // set null value as "serialized" object runtimeService.setVariable(instance.getId(), "nullObject", serializedObjectValue() .serializationDataFormat(JAVA_DATA_FORMAT) .objectTypeName(typeName) // This time an objectTypeName is provided .create()); // get null value via untyped api assertNull(runtimeService.getVariable(instance.getId(), "nullObject")); // get null via typed api ObjectValue deserializedTypedValue = runtimeService.getVariableTyped(instance.getId(), "nullObject"); assertNotNull(deserializedTypedValue); assertTrue(deserializedTypedValue.isDeserialized()); assertEquals(JAVA_DATA_FORMAT, deserializedTypedValue.getSerializationDataFormat()); assertNull(deserializedTypedValue.getValue()); assertNull(deserializedTypedValue.getValueSerialized()); assertNull(deserializedTypedValue.getObjectType()); assertEquals(typeName, deserializedTypedValue.getObjectTypeName()); ObjectValue serializedTypedValue = runtimeService.getVariableTyped(instance.getId(), "nullObject", false); assertNotNull(serializedTypedValue); assertFalse(serializedTypedValue.isDeserialized()); assertEquals(JAVA_DATA_FORMAT, serializedTypedValue.getSerializationDataFormat()); assertNull(serializedTypedValue.getValueSerialized()); assertEquals(typeName, serializedTypedValue.getObjectTypeName()); }