es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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 contenido application/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:

    1. Verifica el tipo de respuesta que envía el servidor. Parece que el servidor está devolviendo una respuesta con el tipo de contenido application/x-java-serialized-object. Asegúrate de que el servidor esté enviando una respuesta con el tipo de contenido application/json como se espera por parte del cliente.
    2. 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:

      implementation("org.springframework.boot:spring-boot-starter-web")
      

    3. Configura el MappingJackson2HttpMessageConverter en el proyecto del cliente. Este convertidor convierte entre JSON y clases POJO. Agrega el siguiente código a tu método retrieveClientIdConfigurationFlow:
      .handle(
         Http.outboundGateway("http://localhost:9502/clients/clientId")
           .httpMethod(HttpMethod.POST)
           .messageConverters(MediaType.APPLICATION_JSON_VALUE, MappingJackson2HttpMessageConverter())
           .expectedResponseType(String::class.java)
           .get())
      

      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 como String.class. Asegúrate de que MediaType.APPLICATION_JSON_VALUE esté configurado como el tipo de contenido.

    4. 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 objeto ClientId.

    Siguiendo estos pasos, deberías poder resolver el problema y obtener exitosamente el clientId desde el servidor.

Comments are closed.