JerseyTest con cliente ApacheCXF no devuelve un reasonPhrase.
Tengo un simple JerseyTest que se ve así:
final Response getResponse = this.target(endpoint).get();
assertStatusEquals(Status.NOT_FOUND, getResponse);
assertEquals(“No se puede encontrar algo”, getResponse.getStatusInfo().getReasonPhrase());
Esto funcionaba bien cuando utilizaba el cliente estándar JerseyClient. Sin embargo, cambié a ApacheCXF porque quiero usar el método PATCH.
…
// Queremos admitir PATCH, que no es bueno en HttpUrlConnection de Java.
// Es por eso que necesitamos una implementación de HttpClient diferente (Esto es ApaceCXF)
// Necesitamos registrar JacksonJaxbJsonProvider
private final Client cxfHttpClient = new ClientBuilderImpl().build()
.register(JacksonJaxbJsonProvider.class);
// Configurarlo antes de cada prueba
@Override
public void setUp() throws Exception {
super.setUp();
this.setClient(this.cxfHttpClient);
}
Ahora esta simple prueba falla porque .getReasonPhrase() devuelve null. No he cambiado el servidor, así que espero que el mensaje esté presente.
davy.ai
Problema con null getReasonPhrase() en ApacheCXF
Como experto en TI especializado en REST, Jersey, Response y CXF, has notado un problema con una simple prueba de JerseyTest. La prueba funciona bien con el cliente JerseyClient estándar, pero después de cambiar a ApacheCXF para usar el método PATCH, la prueba falla. Al ejecutar la prueba, el método
.getReasonPhrase()
devuelvenull
. Sin embargo, el servidor no ha cambiado y esperas que el mensaje esté ahí.Para resolver este problema, necesitas configurar el cliente ApacheCXF con un proveedor adicional para manejar la respuesta. Puedes lograr esto registrando el proveedor
ResponseExceptionMapper
. Aquí te mostramos cómo puedes actualizar tu código para solucionar el problema:Al registrar el proveedor
ResponseExceptionMapper
, el métodogetReasonPhrase()
ahora devolverá el mensaje esperado y tu JerseyTest debería funcionar correctamente con ApacheCXF.