Spring Integration org.springframework.web.client.RestClientException: No HttpMessageConverter Spring Integration org.springframework.web.client.RestClientException: No HttpMessageConverter
Sigo recibiendo la siguiente excepción en mi proyecto de Spring Integration:
Fallo de ejecución de solicitud HTTP para URI [http://localhost:9502/clients/clientId] en el [bean 'retrieveClientIdConfigurationFlow.http:outbound-gateway#0' para el componente 'retrieveClientIdConfigurationFlow.org.springframework.integration.config.ConsumerEndpointFactoryBean#2'; definido en: 'class path resource [com/abs/integration/services/RetrieveClientIDConfiguration.class]'; desde la fuente: 'bean method retrieveClientIdConfigurationFlow']; la excepción anidada es org.springframework.web.client.RestClientException: No HttpMessageConverter para com.abs.retrieveclientid.request.TransactionType y tipo de contenido "application/x-java-serialized-object" aquí
Mi bean se ve así:
@Bean
fun retrieveClientIdConfigurationFlow(
xmlRequestTransformer: XmlRequestTransformer,
xmlResponseTransformer: XmlResponseTransformer,
responseTransformer: ResponseTransformer
): IntegrationFlow =
IntegrationFlows
.from(INPUT_CHANNEL)
.transform(xmlRequestTransformer)
.handle(
Http.outboundGateway("http://localhost:9502/clients/clientId")
.httpMethod(HttpMethod.POST)
.expectedResponseType(String::class.java)
)
.transform(Transformers.fromJson(ClientId::class.java))
.transform(responseTransformer)
.transform(xmlResponseTransformer)
.channel(OUTPUT_CHANNEL)
.get()
Recibo un archivo XML de solicitud, después de lo cual hago una llamada para recuperar el clientId que se utilizará para generar un XML de respuesta.
Parece que el clientId ni siquiera se crea al ejecutar el método ‘handle’ (no hay aumento en la base de datos). Al probar el punto de conexión en Postman, se genera el id y el tipo de contenido es “application/json”.
He intentado conversores de mensajes, pero ninguno de ellos funcionó. Cualquier sugerencia sería muy apreciada.
davy.ai
El mensaje de error indica que no existe un convertidor de mensajes HTTP para el tipo
com.abs.retrieveclientid.request.TransactionType
con el tipo de contenidoapplication/x-java-serialized-object
. Esto significa que el servidor está enviando una respuesta con un tipo de contenido que no es compatible con los convertidores de mensajes configurados en el cliente.Para resolver el problema, puedes intentar los siguientes pasos:
application/x-java-serialized-object
. Asegúrate de que el servidor esté enviando una respuesta con el tipo de contenidoapplication/json
como se espera por parte del cliente.Asegúrate de que las dependencias necesarias para convertir datos JSON estén incluidas en el proyecto del cliente. Los
HttpMessageConverters
convierten datos entre JSON y clases POJO. Puedes agregar la siguiente dependencia a tu proyecto para soportar la conversión JSON:MappingJackson2HttpMessageConverter
en el proyecto del cliente. Este convertidor convierte entre JSON y clases POJO. Agrega el siguiente código a tu métodoretrieveClientIdConfigurationFlow
:Este código agrega el
MappingJackson2HttpMessageConverter
a la lista de convertidores de mensajes utilizados por la puerta de enlace HTTP. También establece el tipo de respuesta esperado comoString.class
. Asegúrate de queMediaType.APPLICATION_JSON_VALUE
esté configurado como el tipo de contenido.Asegúrate de que la clase
ClientId
sea válida y esté correctamente anotada con las anotaciones@JsonProperty
. Esto permite que el convertidor mapee los datos de respuesta JSON al objetoClientId
.Siguiendo estos pasos, deberías poder resolver el problema y obtener exitosamente el
clientId
desde el servidor.