pinpoint-apm/pinpoint · warning · IllegalArgumentException
'(' not found. signature:
Error message
'(' not found. signature: What it means
getParameterSignature extracts the parameter section of a JVM method descriptor, which must begin with '('. If the signature string contains no '(' the input is not a method descriptor and IllegalArgumentException is thrown. Called from parameterSignature.
Source
Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/JavaAssistUtils.java:380
private static List<String> splitParameterSignature(String signature) {
final String parameterSignature = getParameterSignature(signature);
if (parameterSignature.isEmpty()) {
return Collections.emptyList();
}
final Matcher matcher = PARAMETER_SIGNATURE_PATTERN.matcher(parameterSignature);
final List<String> parameterTypeList = new ArrayList<>();
while (matcher.find()) {
parameterTypeList.add(matcher.group());
}
return parameterTypeList;
}
private static String getParameterSignature(String signature) {
int start = signature.indexOf('(');
if (start == -1) {
throw new IllegalArgumentException("'(' not found. signature:" + signature);
}
final int end = signature.indexOf(')', start + 1);
if (end == -1) {
throw new IllegalArgumentException("')' not found. signature:" + signature);
}
start = start + 1;
if (start == end) {
return "";
}
return signature.substring(start, end);
}
public static String[] getParameterType(Class<?>[] paramsClass) {
if (paramsClass == null) {
return null;
}
String[] paramsString = new String[paramsClass.length];
for (int i = 0; i < paramsClass.length; i++) {View on GitHub (pinned to 744c3d3075)
Solutions
- Pass the full JVM method descriptor including '(' ... ')' e.g. '(ILjava/lang/String;)V'
- Check upstream code that stores/truncates the signature
- Validate the input with signature.contains("(") before calling
Example fix
// before
JavaAssistUtils.parseParameterSignature("Ljava/lang/String;"); // field descriptor, no '(' -> throws
// after
JavaAssistUtils.parseParameterSignature("(Ljava/lang/String;)V"); // method descriptor Defensive patterns
Strategy: validation
Validate before calling
if (signature == null || signature.indexOf('(') < 0) { throw new IllegalArgumentException("not a method descriptor: " + signature); } Type guard
boolean isMethodDescriptor(String s) { return s != null && s.indexOf('(') >= 0; } Try / catch
try { params = JavaAssistUtils.parseParameterSignature(sig); } catch (IllegalArgumentException e) { params = Collections.emptyList(); } Prevention
- Pass full method descriptors '(args)return' only
- Distinguish field vs method descriptors in metadata storage
- Check for '(' before invoking signature parsing
When it happens
Trigger: Calling JavaAssistUtils.parameterSignature/getParameterSignature with a string lacking '(', e.g. a bare class name, a field descriptor, or only the return-type portion of a descriptor.
Common situations: Confusing field descriptors with method descriptors; passing already-stripped parameter signatures back in; metadata fields populated with method names instead of full descriptors.
Understand the failure class
Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.
Related errors
- invalid signature :
- invalid signature. objectName not found :
- ')' not found. signature:
- agentIndex not found:${transactionId}
- invalid transactionId:${transactionId}
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/da712df9488d9e29.
Report an issue: GitHub.