pinpoint-apm/pinpoint · error · HbaseSchemaParseException

Error computing md5 for change set id :

Error message

Error computing md5 for change set id : 

What it means

ChangeSetMapper.mapChangeSet marshals the parsed change set back to XML to compute its md5 checksum. If a JAXBException with a linked exception occurs during this round-trip, the linked cause is wrapped in a HbaseSchemaParseException mentioning the change set id. (A JAXBException with no linked exception becomes a plain IllegalStateException "JAXB error".)

Source

Thrown at hbase/hbase-schema/src/main/java/com/navercorp/pinpoint/hbase/schema/reader/xml/mapper/ChangeSetMapper.java:62

        this.jaxbContext = Objects.requireNonNull(jaxbContext, "jaxbContext");
        this.schema = schema;
        this.tableChangeMapper = new TableChangeMapper();
    }

    public ChangeSet mapChangeSet(com.navercorp.pinpoint.hbase.schema.definition.xml.ChangeSet changeSet) {
        try {
            StringWriter stringWriter = new StringWriter(); // no need to close StringWriter
            createMarshaller().marshal(changeSet, stringWriter);
            String value = stringWriter.toString();

            List<TableChange> tableChangeList = mapTableChanges(changeSet.getModifyTable(), changeSet.getCreateTable());
            return new ChangeSet(changeSet.getId(), value, tableChangeList);
        } catch (JAXBException e) {
            Throwable linkedException = e.getLinkedException();
            if (linkedException == null) {
                throw new IllegalStateException("JAXB error", e);
            }
            throw new HbaseSchemaParseException("Error computing md5 for change set id : " + changeSet.getId(), linkedException);
        }
    }

    private Marshaller createMarshaller() throws JAXBException {
        Marshaller marshaller = jaxbContext.createMarshaller();
        marshaller.setSchema(schema);
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
        return marshaller;
    }

    private List<TableChange> mapTableChanges(List<com.navercorp.pinpoint.hbase.schema.definition.xml.ChangeSet.ModifyTable> modifyTables,
                                              List<com.navercorp.pinpoint.hbase.schema.definition.xml.ChangeSet.CreateTable> createTables) {
        if (modifyTables.isEmpty() && createTables.isEmpty()) {
            return Collections.emptyList();
        }
        List<TableChange> tableChanges = new ArrayList<>(modifyTables.size() + createTables.size());
        for (com.navercorp.pinpoint.hbase.schema.definition.xml.ChangeSet.ModifyTable modifyTable : modifyTables) {

View on GitHub (pinned to 744c3d3075)

Solutions

  1. Inspect getLinkedException() in the stack trace — it names the actual XML/schema problem
  2. Fix the offending changeSet XML element identified by the id in the message
  3. Validate the schema XML against the JAXB XSD before loading
  4. Ensure the JAXB runtime version matches the one the definitions were generated for

Example fix

// before
<createTable name="AgentStat">  <!-- missing required attribute -->
// after
<createTable name="AgentStat" option="...">  <!-- conforms to XSD -->
Defensive patterns

Strategy: try-catch

Validate before calling

// validate XML against the XSD before the reader marshals it
SchemaFactory f = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Validator v = f.newSchema(xsd).newValidator();
v.validate(new StreamSource(changeSetXml));

Try / catch

try {
    changeSets = schemaReader.loadChangeSets(resource);
} catch (HbaseSchemaParseException e) {
    if (e.getMessage().startsWith("Error computing md5")) {
        logger.error("Bad changeSet XML, id={}", idFromMessage(e.getMessage()), e.getCause());
    } else {
        throw e;
    }
}

Prevention

When it happens

Trigger: JAXB marshalling/validation failure with a linked exception while recomputing a changeSet's checksum — e.g. content that violates the XML schema, or unmarshal-side errors surfaced with a cause during mapping.

Common situations: Change-set XML content that does not conform to the definition XSD (wrong element/attribute values); malformed XML caught during unmarshalling; JAXB version incompatibilities altering marshalling behavior.

Related errors


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