[Canonical page](<https://docs.dhtmlx.com/planning-engine/java/api/errors/overview/>)
[Full documentation index](<https://docs.dhtmlx.com/planning-engine/llms.txt>)


# errors

The exceptions the engine throws. All of them are unchecked: they extend `RuntimeException`, and no method declares `throws`. Every engine failure is a [`PlenException`](<https://docs.dhtmlx.com/planning-engine/java/api/errors/plen-exception.md>), an abstract base with two subclasses:

- [`InputException`](<https://docs.dhtmlx.com/planning-engine/java/api/errors/input-exception.md>) - the data or options passed to a call are invalid. The `kind` field is an [`InputErrorKind`](<https://docs.dhtmlx.com/planning-engine/java/api/errors/input-exception.md#inputerrorkind>) (`PARSE` or `VALIDATION`), and `path` names the input field the error refers to, such as `tasks[3].constraint_date`.
- [`ProjectException`](<https://docs.dhtmlx.com/planning-engine/java/api/errors/project-exception.md>) - the call doesn't fit the current state of a `Project`. The `code` field is a [`ProjectError`](<https://docs.dhtmlx.com/planning-engine/java/api/errors/project-exception.md#projecterror>): `NO_BASELINE`, `STALE_BASELINE` or `NEEDS_RESYNC`.

[`MatchException`](<https://docs.dhtmlx.com/planning-engine/java/api/errors/match-exception.md>) is the exception of [`SkillLayer.slots`](<https://docs.dhtmlx.com/planning-engine/java/api/skill-layer-slots.md>) and `SkillLayer.validatePool`. It isn't a `PlenException`, so `catch (PlenException e)` doesn't catch it. Its two nested subclasses, `MatchException.Invalid` and `MatchException.Project`, convert to the matching `InputException` or `ProjectException` with `toPlenException()`.

A `null` argument that isn't documented as nullable throws `NullPointerException`. The JSON API's [`JsonProjectException`](<https://docs.dhtmlx.com/planning-engine/java/api/json/json-project-exception.md>) is in the [json](<https://docs.dhtmlx.com/planning-engine/java/api/json/overview.md>) folder.

Cycles, conflicts, a planner that didn't converge and operations that [`Project#apply`](<https://docs.dhtmlx.com/planning-engine/java/api/project-apply.md>) rejected aren't exceptions. They come back as data in the result. Every type here is in the `org.dhtmlx.plen` package. For how to handle each failure and recover a project, see [Error handling](<https://docs.dhtmlx.com/planning-engine/java/error-handling.md>).

:::category-index
:::
