pinpoint-apm/pinpoint · warning · IllegalArgumentException

invalid signature. objectName not found :

Error message

invalid signature. objectName not found :

What it means

toObjectType extracts the class part of an 'L...;' object signature (e.g. Ljava/lang/String; -> java/lang/String) and converts it to a Java name. If the extracted segment is empty after conversion, the object signature has no class name and IllegalArgumentException is thrown.

Source

Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/JavaAssistUtils.java:357

        for (int i = 0; i < arraySize; i++) {
            sb.append(ARRAY);
        }
        return sb.toString();
    }

    private static int getArraySize(String description) {
        if (StringUtils.isEmpty(description)) {
            return 0;
        }
        return StringMatchUtils.startsWithCountMatches(description, '[');
    }

    private static String toObjectType(String signature, int startIndex) {
        // Ljava/lang/String;
        final String assistClass = signature.substring(startIndex, signature.length() - 1);
        final String objectName = jvmNameToJavaName(assistClass);
        if (objectName.isEmpty()) {
            throw new IllegalArgumentException("invalid signature. objectName not found :" + signature);
        }
        return objectName;
    }


    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;
    }

View on GitHub (pinned to 744c3d3075)

Solutions

  1. Verify the signature segment between 'L' and ';' is non-empty before parsing
  2. Check the startIndex passed to byteCodeSignatureToObjectType/toObjectType is at the 'L' character
  3. Regenerate or fix the corrupted descriptor at its source

Example fix

// before
String sig = "L;"; // malformed, empty object name -> throws
// after
String sig = "Ljava/lang/String;"; // valid object signature
Defensive patterns

Strategy: validation

Validate before calling

if (signature == null || !signature.startsWith("L") || !signature.endsWith(";") || signature.length() <= 2) { throw new IllegalArgumentException("bad object signature: " + signature); }

Try / catch

try { type = JavaAssistUtils.objectType(sig); } catch (IllegalArgumentException e) { logger.warn("Empty object name in signature {}", sig); type = Object.class.getName(); }

Prevention

When it happens

Trigger: Parsing a descriptor like 'L;' or a signature where substring(startIndex, length-1) is empty, typically a malformed/truncated 'L...;' segment.

Common situations: Truncated descriptors from faulty signature generators; slicing errors by callers passing a wrong startIndex; empty class segments in stored API metadata.

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


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/0b0d6a42260685c9. Report an issue: GitHub.