ExperimentDocumentException.java
package org.hammer.audio.experiment.document;
import java.io.IOException;
/** Checked validation or parsing failure for an untrusted experiment document. */
public final class ExperimentDocumentException extends IOException {
private static final long serialVersionUID = 1L;
private final String documentPointer;
private final String diagnosticCode;
/** Create a pointer-aware document failure. */
public ExperimentDocumentException(String pointer, String code, String message) {
super(message);
this.documentPointer = pointer == null || pointer.isBlank() ? "/" : pointer;
this.diagnosticCode = ExperimentDocument.requireIdentifier(code, "diagnostic code");
}
/** Create a pointer-aware document failure with an underlying parser error. */
public ExperimentDocumentException(String pointer, String code, String message, Throwable cause) {
super(message, cause);
this.documentPointer = pointer == null || pointer.isBlank() ? "/" : pointer;
this.diagnosticCode = ExperimentDocument.requireIdentifier(code, "diagnostic code");
}
/** JSON Pointer or semantic location of the failure. */
public String pointer() {
return documentPointer;
}
/** Stable machine-readable failure code. */
public String code() {
return diagnosticCode;
}
}