{"record":{"id":"3a5f3086ff1cb6fc","repo":"pinpoint-apm/pinpoint","slug":"unsupported-type","errorCode":null,"errorMessage":"unsupported type:","messagePattern":"unsupported type:","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/ParameterUtils.java","lineNumber":108,"sourceCode":"//                return;\n//            }\n//            if (clazz.getClassLoader() != Object.class.getClassLoader()) {\n//                throw new IllegalArgumentException(\"unsupported classloader \" + clazz);\n//            }\n\n            clazz = getRawComponentType(clazz);\n            if (clazz.isPrimitive()) {\n                return;\n            }\n            boolean supportedClass = false;\n            for (Class<?> supportClass : SUPPORT_CLASS) {\n                if (supportClass.isAssignableFrom(clazz)) {\n                    supportedClass = true;\n                    break;\n                }\n            }\n            if (!supportedClass) {\n                throw new IllegalArgumentException(\"unsupported type:\" + clazz);\n            }\n        }\n    }\n\n    static Class<?> getRawComponentType(Class<?> aClass) {\n        while (aClass.isArray()) {\n            aClass = aClass.getComponentType();\n        }\n        return aClass;\n    }\n\n}\n","sourceCodeStart":90,"sourceCodeEnd":121,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/ParameterUtils.java#L90-L121","documentation":"ParameterUtils.checkParameterType validates that the types passed for a TransformCallback constructor are supported: null is rejected and each class must be one of the supported parameter types (e.g. InstrumentContext or a primitive/wrapper/array allowed by the instrumentation API). Passing an unsupported class triggers this IllegalArgumentException.","triggerScenarios":"Calling TransformTemplate.transform(className, callbackClass, parameters, parameterTypes) with a parameterTypes entry that is neither null-checked-supported nor assignable to any supported class in the supportClass list.","commonSituations":"Passing arbitrary application classes as transform callback constructor arguments; passing an interface or user type the bootstrap classloader cannot resolve; version drift where a formerly accepted type was removed from the supported list.","solutions":["Use only supported parameter types: Class, String, integer/wrapper primitives, and InstrumentContext per the API contract","Pass types loadable by the bootstrap/profiler classloader (java.* or pinpoint bootstrap classes), not application classes","Check the ParameterUtils source for your Pinpoint version to confirm which types are supported"],"exampleFix":"// before\ntransformer.transform(\"com.foo.Bar\", MyCallback.class, new Object[]{new Bar()}, new Class[]{Bar.class}); // throws\n// after\ntransformer.transform(\"com.foo.Bar\", MyCallback.class, new Object[]{\"name\"}, new Class[]{String.class});","handlingStrategy":"validation","validationCode":"static final Set<Class<?>> SUPPORTED = Set.of(Class.class, String.class, int.class, Integer.class, long.class, Long.class, boolean.class, Boolean.class);\nboolean validParams = Arrays.stream(parameterTypes).allMatch(t -> t != null && SUPPORTED.contains(t));\nif (!validParams) throw new IllegalArgumentException(\"unsupported transform parameter type\");","typeGuard":null,"tryCatchPattern":"try {\n    transformer.transform(name, cb, params, types);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"unsupported type:\")) {\n        logger.error(\"unsupported transform parameter type; use String/int/wrapper/Class or InstrumentContext\", e);\n    } else { throw e; }\n}","preventionTips":["Restrict transform callback constructor args to the documented supported types","Never pass application classes as transform parameters (bootstrap classloader cannot resolve them)","Re-check supported types when upgrading Pinpoint versions"],"tags":["invalid-argument","transform-callback","instrumentation"],"backgroundTag":"invalid-argument-value","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}