Los proveedores son simplemente una forma de ampliar y personalizar el tiempo de ejecución de JAX-RS. Puede pensar en ellos como complementos que (potencialmente) alteran el comportamiento del tiempo de ejecución, con el fin de lograr un conjunto de objetivos (definidos por el programa).
Los proveedores no son lo mismo que las clases de recursos, existen, conceptualmente, en un nivel intermedio entre las clases de recursos y la implementación JAX-RS. Si ayuda, puede pensar en ellos de la misma manera que los controladores de dispositivo (existentes entre el usuario y el espacio del kernel). Ésta es una generalización amplia.
Hay tres clases de proveedores definidos por la especificación JAX-RS actual. El punto en común entre ellos es que todos los proveedores deben estar identificados por la anotación @Provider y seguir ciertas reglas para la declaración del constructor. Aparte de eso, los diferentes tipos de proveedores pueden tener anotaciones adicionales e implementarán diferentes interfaces.
Proveedores de entidades
Estos proveedores controlan la asignación de representaciones de datos (como XML, JSON, CSV) a sus equivalentes de objetos Java.
Proveedores de contexto
Estos proveedores controlan el contexto al que pueden acceder los recursos a través de las anotaciones @Context.
Proveedores de excepción
Estos proveedores controlan la asignación de excepciones de Java a una instancia de respuesta JAX-RS.
Su tiempo de ejecución vendrá con una serie de proveedores predefinidos que serán responsables de implementar un nivel básico de funcionalidad (por ejemplo, para mapear hacia y desde XML, traducir las excepciones más comunes, etc., etc.). También puede crear sus propios proveedores según sea necesario.
La especificación JAX-RS es una buena referencia para leer sobre estos diferentes tipos de proveedores y lo que hacen (consulte el Capítulo 4).