49 lines
1.8 KiB
Plaintext
49 lines
1.8 KiB
Plaintext
[[dynamic-command-exitcode-resolving]]
|
|
= Exception Resolving
|
|
|
|
ifndef::snippets[:snippets: ../../test/java/org/springframework/shell/docs]
|
|
|
|
Unhandled exceptions will bubble up into shell's `ResultHandlerService` and then eventually
|
|
handled by some instance of `ResultHandler`. Chain of `ExceptionResolver` implementations
|
|
can be used to resolve exceptions and gives you flexibility to return message to get written
|
|
into console together with exit code which are wrapped within `CommandHandlingResult`.
|
|
`CommandHandlingResult` may contain a _message_ and/or _exit code_.
|
|
|
|
[source, java, indent=0]
|
|
----
|
|
include::{snippets}/ErrorHandlingSnippets.java[tag=my-exception-resolver-class]
|
|
----
|
|
|
|
`CommandExceptionResolver` implementations can be defined globally as bean.
|
|
|
|
[source, java, indent=0]
|
|
----
|
|
include::{snippets}/ErrorHandlingSnippets.java[tag=my-exception-resolver-class-as-bean]
|
|
----
|
|
|
|
or defined per `CommandRegistration` if it's applicable only for a particular command itself.
|
|
|
|
[source, java, indent=0]
|
|
----
|
|
include::{snippets}/ErrorHandlingSnippets.java[tag=example1]
|
|
----
|
|
|
|
NOTE: Resolvers defined with a command are handled before global resolvers.
|
|
|
|
|
|
Use you own exception types which can also be an instance of boot's `ExitCodeGenerator` if
|
|
you want to define exit code there.
|
|
|
|
[source, java, indent=0]
|
|
----
|
|
include::{snippets}/ErrorHandlingSnippets.java[tag=my-exception-class]
|
|
----
|
|
|
|
Some build in `CommandExceptionResolver` beans are registered to handle common
|
|
exceptions thrown from command parsing. These are registered with _order_
|
|
presedence defined in `CommandExceptionResolver.DEFAULT_PRECEDENCE`.
|
|
As these beans are used in a given order, `@Order` annotation or `Ordered`
|
|
interface from can be used just like in any other spring app. This
|
|
is generally useful if you need to control your own beans to get used
|
|
either before or after a defaults.
|