{"id":"606ba1c6edcb47a7","repo":"spring-projects/spring-framework","slug":"non-int-index-to-indexed-write-method-indexedwr","errorCode":null,"errorMessage":"Non int index to indexed write method: ${indexedWriteMethod}","messagePattern":"Non int index to indexed write method: (.+?)","errorType":"exception","errorClass":"IntrospectionException","httpStatus":null,"severity":"error","filePath":"spring-beans/src/main/java/org/springframework/beans/PropertyDescriptorUtils.java","lineNumber":217,"sourceCode":"\t\t\tif (params.length != 1) {\n\t\t\t\tthrow new IntrospectionException(\"Bad indexed read method arg count: \" + indexedReadMethod);\n\t\t\t}\n\t\t\tif (params[0] != int.class) {\n\t\t\t\tthrow new IntrospectionException(\"Non int index to indexed read method: \" + indexedReadMethod);\n\t\t\t}\n\t\t\tindexedPropertyType = indexedReadMethod.getReturnType();\n\t\t\tif (indexedPropertyType == void.class) {\n\t\t\t\tthrow new IntrospectionException(\"Indexed read method returns void: \" + indexedReadMethod);\n\t\t\t}\n\t\t}\n\n\t\tif (indexedWriteMethod != null) {\n\t\t\tClass<?>[] params = indexedWriteMethod.getParameterTypes();\n\t\t\tif (params.length != 2) {\n\t\t\t\tthrow new IntrospectionException(\"Bad indexed write method arg count: \" + indexedWriteMethod);\n\t\t\t}\n\t\t\tif (params[0] != int.class) {\n\t\t\t\tthrow new IntrospectionException(\"Non int index to indexed write method: \" + indexedWriteMethod);\n\t\t\t}\n\t\t\tif (indexedPropertyType != null) {\n\t\t\t\tif (indexedPropertyType.isAssignableFrom(params[1])) {\n\t\t\t\t\t// Write method's property type potentially more specific\n\t\t\t\t\tindexedPropertyType = params[1];\n\t\t\t\t}\n\t\t\t\telse if (params[1].isAssignableFrom(indexedPropertyType)) {\n\t\t\t\t\t// Proceed with read method's property type\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new IntrospectionException(\"Type mismatch between indexed read and write methods: \" +\n\t\t\t\t\t\t\tindexedReadMethod + \" - \" + indexedWriteMethod);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tindexedPropertyType = params[1];\n\t\t\t}\n\t\t}","sourceCodeStart":199,"sourceCodeEnd":235,"githubUrl":"https://github.com/spring-projects/spring-framework/blob/e8729d043887bf0d0baf91e062e909b56eb2b708/spring-beans/src/main/java/org/springframework/beans/PropertyDescriptorUtils.java#L199-L235","documentation":"IntrospectionException from PropertyDescriptorUtils.findIndexedPropertyType when the first parameter of an indexed write method is not int. The JavaBean spec requires the index to be primitive int; long, Integer, or other types are rejected, mirroring [174] for the write path.","triggerScenarios":"An indexed setter declared setItems(long index, String value) or setItems(Integer, String) being registered as indexedWriteMethod.","commonSituations":"Long-indexed collections; boxed Integer indices from generated code; non-int index types from interop.","solutions":["Change the first parameter of the indexed setter to primitive int.","If long indexing is required, abandon IndexedPropertyDescriptor and use a normal accessor.","Regenerate code producing non-int indices."],"exampleFix":"// before\npublic void setItems(long index, String value) { ... }\n\n// after\npublic void setItems(int index, String value) { ... }","handlingStrategy":"type-guard","validationCode":"static void assertIntIndexOnWrite(Method indexedWriteMethod) {\n    if (indexedWriteMethod.getParameterTypes()[0] != int.class) {\n        throw new IllegalArgumentException(\"Indexed write index must be int: \" + indexedWriteMethod);\n    }\n}","typeGuard":"static boolean indexedWriteHasIntIndex(Method m) {\n    Class<?>[] p = m.getParameterTypes();\n    return p.length == 2 && p[0] == int.class;\n}","tryCatchPattern":"try {\n    return new IndexedPropertyDescriptor(name, null, null, indexedReadMethod, indexedWriteMethod);\n} catch (java.beans.IntrospectionException ex) {\n    if (ex.getMessage().startsWith(\"Non int index to indexed write\")) {\n        log.error(\"Change {} first param to int\", indexedWriteMethod);\n    }\n    throw ex;\n}","preventionTips":["First parameter of indexed setters must be primitive int.","Avoid long/boxed Integer indices for indexed accessors.","Static-analyse indexed setter signatures."],"tags":["property-descriptor","indexed","introspection","spring-beans"],"analyzedSha":"e8729d043887bf0d0baf91e062e909b56eb2b708","analyzedAt":"2026-08-04T19:07:39.725Z","schemaVersion":2}