{"record":{"id":"c70559ae768de316","repo":"pinpoint-apm/pinpoint","slug":"invalid-type-provider-definition","errorCode":null,"errorMessage":"Invalid type provider definition : ","messagePattern":"Invalid type provider definition : ","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"agent-module/plugins-loader/src/main/java/com/navercorp/pinpoint/loader/plugins/trace/yaml/TraceMetadataProviderYamlParser.java","lineNumber":58,"sourceCode":"\n/**\n * @author HyunGil Jeong\n */\npublic class TraceMetadataProviderYamlParser implements TraceMetadataProviderParser {\n\n    private final Logger logger = LogManager.getLogger(this.getClass());\n    private final ObjectMapper mapper = new ObjectMapper(new YAMLFactory());\n\n    @Override\n    public ParsedTraceMetadataProvider parse(URL url) {\n        String typeProviderId = getTypeProviderId(url);\n        try {\n            ParsedTraceMetadata parsedTraceMetadata = parse0(url);\n            try {List<ServiceTypeInfo> serviceTypeInfos = toServiceTypeInfos(parsedTraceMetadata.getServiceTypes());\n                List<AnnotationKey> annotationKeys = toAnnotationKeys(parsedTraceMetadata.getAnnotationKeys());\n                return new ParsedTraceMetadataProvider(typeProviderId, serviceTypeInfos, annotationKeys);\n            } catch (Exception e) {\n                throw new IllegalStateException(\"Invalid type provider definition : \" + url.toString(), e);\n            }\n        } catch (IOException e) {\n            throw new IllegalStateException(\"IOException parsing \" + url.toExternalForm(), e);\n        }\n    }\n\n    private ParsedTraceMetadata parse0(URL metaUrl) throws IOException {\n        try (InputStream inputStream = metaUrl.openStream()) {\n            ParsedTraceMetadata parsedTraceMetadata = mapper.readValue(inputStream, ParsedTraceMetadata.class);\n            if (parsedTraceMetadata == null) {\n                logger.warn(\"Empty type provider definition. Skipping : {}\", metaUrl.toExternalForm());\n            }\n            return parsedTraceMetadata;\n        } catch (JsonParseException | JsonMappingException e) {\n            throw new IllegalStateException(\"Error parsing yml : \" + metaUrl, e);\n        } catch (IOException e) {\n            throw new IllegalStateException(\"Error opening stream : \" + metaUrl, e);\n        }","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/plugins-loader/src/main/java/com/navercorp/pinpoint/loader/plugins/trace/yaml/TraceMetadataProviderYamlParser.java#L40-L76","documentation":"TraceMetadataProviderYamlParser.parse(URL) loads a type-provider definition from a URL and converts its parsed service types and annotation keys. Any exception during that conversion (e.g. the empty-name check in toServiceTypeInfo) is wrapped in an IllegalStateException with the URL appended, marking the whole provider definition as invalid.","triggerScenarios":"Calling parse(url) where the URL points to a type-provider YAML whose contents fail post-parse conversion — e.g. a serviceTypes entry with an empty name, or an invalid annotationKey entry.","commonSituations":"Shipping a malformed type-provider yml inside a plugin jar; YAML valid to Jackson but semantically invalid to Pinpoint's checks; plugin version mismatch with the expected schema.","solutions":["Read the chained cause (e) — it names the exact field that failed validation","Fix the offending entry in the YAML at the reported URL (commonly an empty serviceType name or bad annotationKey)","Validate the YAML locally with TraceMetadataProviderYamlParser before packaging","Ensure the plugin's pinpoint-metadata yaml matches the schema for your Pinpoint version"],"exampleFix":"// before\nserviceTypes:\n  - code: 1000\n// after (add required name)\nserviceTypes:\n  - code: 1000\n    name: \"MY_SERVICE\"","handlingStrategy":"try-catch","validationCode":"try {\n    new TraceMetadataProviderYamlParser().parse(providerUrl);\n} catch (IllegalStateException e) {\n    e.getCause().printStackTrace(); // names the failing field\n}","typeGuard":null,"tryCatchPattern":"try {\n    parser.parse(url);\n} catch (IllegalStateException e) {\n    // inspect e.getCause() for the exact invalid entry and fix the YAML\n}","preventionTips":["Keep the plugin's type-provider yml schema-valid for your Pinpoint version","Parse and validate the YAML in unit tests","Always check the chained cause, which pinpoints the failing entry"],"tags":["yaml","plugin","illegalstate","config"],"backgroundTag":"schema-validation-failed","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"}