{"record":{"id":"46901cc11efb0fa7","repo":"quarkusio/quarkus","slug":"not-supported-yet","errorCode":null,"errorMessage":"not supported yet","messagePattern":"not supported yet","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/resteasy-reactive/rest-client-jaxrs/deployment/src/main/java/io/quarkus/jaxrs/client/reactive/deployment/JaxrsClientReactiveProcessor.java","lineNumber":3346,"sourceCode":"                                paramHandle);\n                    } else if (primitiveType == PrimitiveType.LONG) {\n                        componentType = DotNames.LONG.toString();\n                        paramArray = notNullParam.invokeStaticMethod(\n                                MethodDescriptor.ofMethod(ToObjectArray.class, \"primitiveArray\", Long[].class, long[].class),\n                                paramHandle);\n                    } else if (primitiveType == PrimitiveType.SHORT) {\n                        componentType = DotNames.SHORT.toString();\n                        paramArray = notNullParam.invokeStaticMethod(\n                                MethodDescriptor.ofMethod(ToObjectArray.class, \"primitiveArray\", Short[].class, short[].class),\n                                paramHandle);\n                    } else if (primitiveType == PrimitiveType.BOOLEAN) {\n                        componentType = DotNames.BOOLEAN.toString();\n                        paramArray = notNullParam.invokeStaticMethod(\n                                MethodDescriptor.ofMethod(ToObjectArray.class, \"primitiveArray\", Boolean[].class,\n                                        boolean[].class),\n                                paramHandle);\n                    } else {\n                        throw new IllegalArgumentException(\"not supported yet\");\n                    }\n                } else {\n                    componentType = constituentType.name().toString();\n                    paramArray = notNullParam.checkCast(paramHandle, Object[].class);\n                }\n            } else if (isCollection(type, index)) {\n                if (type.kind() == PARAMETERIZED_TYPE) {\n                    Type paramType = type.asParameterizedType().arguments().get(0);\n                    if ((paramType.kind() == CLASS) || (paramType.kind() == PARAMETERIZED_TYPE)) {\n                        componentType = paramType.name().toString();\n                    }\n                }\n                if (componentType == null) {\n                    componentType = DotNames.OBJECT.toString();\n                }\n                paramArray = notNullParam.invokeStaticMethod(\n                        MethodDescriptor.ofMethod(ToObjectArray.class, \"collection\", Object[].class, Collection.class),\n                        paramHandle);","sourceCodeStart":3328,"sourceCodeEnd":3364,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/resteasy-reactive/rest-client-jaxrs/deployment/src/main/java/io/quarkus/jaxrs/client/reactive/deployment/JaxrsClientReactiveProcessor.java#L3328-L3364","documentation":"When expanding an array-typed parameter into query/path parameters, Quarkus supports String wrappers and certain primitives (int, long, boolean, etc. via ToObjectArray). An array whose component type is some other object type or unhandled primitive falls into this 'not supported yet' branch and fails generation.","triggerScenarios":"Passing e.g. UUID[], LocalDate[], BigDecimal[] (or a primitive array not in the supported set) as a query/path parameter on a REST client method.","commonSituations":"Trying to pass arrays of value objects as repeated query parameters; newer JDK or API types (records, Optional[]) used directly as parameters.","solutions":["Convert the array to String[] (or List<String>) before passing, formatting elements yourself","Use a supported component type (String, Integer, Long, Boolean, primitives in the supported set)","Register a custom ParamConverter and pass a single String value instead of an array"],"exampleFix":"// before\n@GET\nList<Item> byIds(UUID[] ids);\n// after\n@GET\nList<Item> byIds(List<String> ids); // convert UUIDs to strings at call site","handlingStrategy":"validation","validationCode":"static void validateArrayParams(Class<?> client) throws Exception {\n    java.util.Set<Class<?>> ok = java.util.Set.of(\n        String.class, Integer.class, Long.class, Boolean.class,\n        int.class, long.class, boolean.class, short.class, byte.class, char.class, float.class, double.class);\n    for (var m : client.getDeclaredMethods()) {\n        for (var p : m.getParameters()) {\n            if (p.getType().isArray() && !ok.contains(p.getType().getComponentType())) {\n                throw new IllegalArgumentException(m + \": array param of \"\n                    + p.getType().getComponentType() + \" unsupported; use List<String> or convert\");\n            }\n        }\n    }\n}","typeGuard":"static boolean isSupportedArrayParam(Class<?> t) {\n    if (!t.isArray()) return true;\n    Class<?> c = t.getComponentType();\n    return c == String.class || c == Integer.class || c == Long.class\n        || c == Boolean.class || c.isPrimitive();\n}","tryCatchPattern":null,"preventionTips":["Use List<String> / String[] for repeated query or path parameters","Convert value objects (UUID, LocalDate, BigDecimal) to Strings before passing","Keep a compile-time-checked client interface test to catch unsupported parameter kinds early"],"tags":["quarkus","rest-client","arrays","unsupported-type"],"backgroundTag":"unsupported-parameter-type","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}