Cómo arreglar un DestinationAccessException lanzada por la nube SDK de SAP durante el inicio de la aplicación

alex-ma:

Quiero extender un sistema de nubes S / 4hana con una aplicación de la primavera. Es posible construir la aplicación sin ningún error, y puede ser también desplegó al SAP Cloud Platform. Si bien la aplicación backend está comenzando, se genera un error. El error de los registros es la siguiente:

[.../WEB-INF/classes/com/sap/controllers/ExportController.class]: Unsatisfied dependency expressed through constructor parameter 0; 
nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'exportServiceImpl' defined in file [.../WEB-INF/classes/com/sap/services/ExportServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0;
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adsService' defined in class path resource [com/sap/ads/service/ServiceConfiguration.class]: Bean instantiation via factory method failed;
nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.sap.ads.service.Service]: Factory method 'service' threw exception;
nested exception is com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationAccessException: Failed to get ConnectivityConfiguration: no RequestContext available. Have you correctly configured a RequestContextServletFilter or have you wrapped your logic in a RequestContextExecutor when executing background tasks that are not triggered by a request?

Después de eso, parece que ocurra el error en el ServiceConfiguration.class con el DestinationAccessException .

Ya he comprobado y se incluye lo siguiente: Creación de ErpConfigContext lanzó excepción

Desafortunadamente el error sigue siendo el mismo.

Aquí está la aplicación de las partes afectadas:

Service.class :

[...]
public interface Service {

    [...]

    public static final String DESTINATION_NAME = "myDestination";

    @RequestLine("POST /example/path")
    Response doSomething(Request myRequest);

}

ServiceConfiguration.class :

[...]
@Configuration
public class ServiceConfiguration {

    @Bean
    public Service service() {
        return Feign.builder()
                .encoder(new JacksonEncoder())
                .decoder(new JacksonDecoder())
                .client(DestinationHelper.getHttpClient(Service.DESTINATION_NAME))
            .target(Service.class, DestinationHelper.getUrl(service.DESTINATION_NAME));
    }

}

DestinationHelper.class :

[...]
public class DestinationHelper {

    /**
     * @return the URL of the destination with {@code destinationName}
     */
    public static String getUrl(String destinationName) {
        return DestinationAccessor
                .getDestination(destinationName)
                .getUri()
                .toString();
    }

    /**
     * @return an HTTP client preconfigured for the destination
     */
    public static ApacheHttpClient getHttpClient(final String destinationName) {
        return new ApacheHttpClient(HttpClientAccessor.getHttpClient(destinationName));
    }

}

¿Hay algo malo en práctica o incluso desaparecido en la implementación del servicio? Tras el registro de errores parece que el servicio no es realmente capaz de establecer una conexión adecuada al destino.

Sander Wozniak:

El problema aquí es que durante la puesta en marcha de la aplicación, no RequestContextestá disponible todavía.

Lo que debería solucionar el problema es envolver el código correspondiente en una RequestContextExecutorde la siguiente manera:

@Bean
public Service service() throws Exception {
    return new RequestContextExecutor().execute(() -> {
        return Feign.builder()
            .encoder(new JacksonEncoder())
            .decoder(new JacksonDecoder())
            .client(DestinationHelper.getHttpClient(Service.DESTINATION_NAME))
        .target(Service.class, DestinationHelper.getUrl(service.DESTINATION_NAME));
    };
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=214567&siteId=1
Recomendado
Clasificación