pinpoint-apm/pinpoint · critical · HbaseSchemaParseException

Error loading change sets from

Error message

Error loading change sets from 

What it means

XmlHbaseSchemaReader.loadChangeSets wraps any unexpected Exception (other than HbaseSchemaParseException, which is rethrown) while parsing the XML schema definition into a HbaseSchemaParseException carrying the resource path. It signals that reading/interpreting the change-set XML failed for a reason other than a recognized parse error.

Source

Thrown at hbase/hbase-schema/src/main/java/com/navercorp/pinpoint/hbase/schema/reader/xml/XmlHbaseSchemaReader.java:86

    /**
     * Loads change sets from the hbase schema xml file at the given path.
     *
     * @param path path to hbase schema xml file
     * @return list of change sets loaded
     * @throws HbaseSchemaParseException if there was a problem reading or parsing from the schema xml file
     */
    @Override
    public List<ChangeSet> loadChangeSets(String path) {
        Resource resource = resourceLoader.getResource(path);
        XmlParseContext xmlParseContext = new XmlParseContext(resource);
        try {
            loadChangeSets(xmlParseContext);
        } catch (HbaseSchemaParseException e) {
            logger.error("Error loading change sets from {}", xmlParseContext.getResource(), e);
            throw e;
        } catch (Exception e) {
            logger.error("Error loading change sets from {}", xmlParseContext.getResource(), e);
            throw new HbaseSchemaParseException("Error loading change sets from " + xmlParseContext.getResource(), e);
        }
        return xmlParseContext.getChangeSets();
    }

    private void loadChangeSets(XmlParseContext xmlParseContext) throws IOException {
        Resource resource = xmlParseContext.getResource();
        XmlHbaseSchemaParseResult parseResult = readHbaseSchema(resource);
        for (String includeFile : parseResult.getIncludeFiles()) {
            Resource includeResource = createResource(resource, includeFile);
            xmlParseContext.setResource(includeResource);
            loadChangeSets(xmlParseContext);
        }
        xmlParseContext.addChangeSets(parseResult.getChangeSets());
    }

    private Resource createResource(Resource currentResource, String path) throws IOException {
        if (isAbsolutePath(path)) {
            return resourceLoader.getResource(path);

View on GitHub (pinned to 744c3d3075)

Solutions

  1. Check the wrapped cause (e) and the logged resource path to find the root failure
  2. Verify the resource path is on the classpath and spelled correctly
  3. Validate the schema XML against its XSD to catch structural problems
  4. Open the resource with a plain reader first to confirm it is readable and well-formed
Defensive patterns

Strategy: try-catch

Validate before calling

Resource res = new ClassPathResource(path);
if (!res.exists()) {
    throw new IllegalStateException("Schema XML not on classpath: " + path);
}

Try / catch

try {
    schemaReader.loadChangeSets(resource);
} catch (HbaseSchemaParseException e) {
    logger.error("Failed to load schema from {}", resource, e.getCause());
    throw e;
}

Prevention

When it happens

Trigger: Any IOException or runtime exception thrown by loadChangeSets(xmlParseContext) — e.g. unreadable classpath resource, malformed XML raising an unchecked exception, mapping errors — inside loadChangeSets.

Common situations: Schema XML file missing from the classpath/jar; file exists but XML is malformed; include resources pointing at nonexistent paths; JAXB/IO problems from a corrupted or wrong-version schema definition file.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


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