{"record":{"id":"da2d857878ebd3c3","repo":"flowable/flowable-engine","slug":"property-is-not-writable-on","errorCode":null,"errorMessage":"Property '' is not writable on ''","messagePattern":"Property '' is not writable on ''","errorType":"exception","errorClass":"PropertyNotWritableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/javax/el/ArrayELResolver.java","lineNumber":212,"sourceCode":"\t * @throws ClassCastException if the class of the specified element prevents it from being added to this array.\n\t * @throws NullPointerException if context is <code>null</code>.\n\t * @throws IllegalArgumentException if the property could not be coerced into an integer, or if some aspect of the\n\t * specified element prevents it from being added to this array.\n\t * @throws PropertyNotWritableException if this resolver was constructed in read-only mode or the property was the\n\t * case sensitive string {@code length}.\n\t * @throws PropertyNotFoundException if the given index is out of bounds for this array.\n\t * @throws ELException if an exception was thrown while performing the property or variable resolution. The thrown\n\t * exception must be included as the cause property of this exception, if available.\n\t */\n\t@Override\n\tpublic void setValue(ELContext context, Object base, Object property, Object value) {\n\t\tObjects.requireNonNull(context, \"context is null\");\n\n\t\tif (isResolvable(base)) {\n\t\t\tcontext.setPropertyResolved(base, property);\n\n\t\t\tif (LENGTH_PROPERTY_NAME.equals(property)) {\n\t\t\t\tthrow new PropertyNotWritableException(\"Property '\" + property + \"' is not writable on '\" + base.getClass().getName() + \"'\");\n\t\t\t}\n\n\t\t\tif (readOnly) {\n\t\t\t\tthrow new PropertyNotWritableException(\"resolver is read-only\");\n\t\t\t}\n\t\t\tint idx = coerce(property);\n\t\t\tcheckBounds(base, idx);\n\t\t\tif (value != null && !Util.isAssignableFrom(value.getClass(), base.getClass().getComponentType())) {\n\t\t\t\tthrow new ClassCastException(\n\t\t\t\t\t\t\"Unable to add an object of type '\" + value.getClass().getName() + \"' to an array of objects of type '\" + base.getClass()\n\t\t\t\t\t\t\t\t.getComponentType().getName() + \"'\");\n\t\t\t}\n\t\t\tArray.set(base, idx, value);\n\t\t}\n\t}\n\n\t/**\n\t * If the base object is a Java language array, returns whether a call to {@link #setValue} will always fail.","sourceCodeStart":194,"sourceCodeEnd":230,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/javax/el/ArrayELResolver.java#L194-L230","documentation":"Thrown by ArrayELResolver.setValue: a write was attempted to the pseudo-property 'length' of an array (or another non-writable array property); arrays expose length as read-only metadata, so the EL resolver refuses the assignment.","triggerScenarios":"Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/javax/el/ArrayELResolver.java:212 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Write to a valid integer index of the array instead of 'length'","Use a List if the collection must be resized dynamically"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}