Java 如何修复SAP Cloud SDK在应用程序启动期间引发的DestinationAccess异常

Java 如何修复SAP Cloud SDK在应用程序启动期间引发的DestinationAccess异常,java,sap-cloud-platform,sap-cloud-sdk,s4hana,Java,Sap Cloud Platform,Sap Cloud Sdk,S4hana,我想用Spring应用程序扩展S/4HANA云系统。可以毫无错误地构建应用程序,也可以将其部署到SAP云平台。当后端应用程序启动时,它会抛出一个错误。日志中的错误如下所示: @Bean public Service service() throws Exception { return new RequestContextExecutor().execute(() -> { return Feign.builder() .encoder(ne

我想用Spring应用程序扩展S/4HANA云系统。可以毫无错误地构建应用程序,也可以将其部署到SAP云平台。当后端应用程序启动时,它会抛出一个错误。日志中的错误如下所示:

@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));
    };
}
[…/WEB-INF/classes/com/sap/controllers/ExportController.class]:通过构造函数参数0表示的未满足的依赖关系;
嵌套异常为org.springframework.beans.factory.unsatifiedDependencyException:创建名为“exportServiceImpl”的bean时出错,该bean在文件[…/WEB-INF/classes/com/sap/services/exportServiceImpl.class]中定义:通过构造函数参数0表示的未满足的依赖关系;
嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“adsService”的bean时出错,该bean在类路径资源[com/sap/ads/service/ServiceConfiguration.class]:通过工厂方法实例化bean失败;
嵌套异常为org.springframework.beans.BeanInstantiationException:未能实例化[com.sap.ads.service.service]:工厂方法“service”引发异常;
嵌套异常为com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationAccessException:无法获取ConnectionConfiguration:无可用的RequestContext。在执行非请求触发的后台任务时,您是否正确配置了RequestContextServletFilter,或者是否将逻辑包装在RequestContextExecutor中?
接下来,错误似乎发生在带有DestinationAccessException的ServiceConfiguration.class中

我已经检查并包括以下内容:

不幸的是,错误仍然是一样的

以下是受影响部分的实施情况:

服务级别:

[…]
公共接口服务{
[...]
公共静态最终字符串DESTINATION\u NAME=“myDestination”;
@请求行(“POST/example/path”)
响应剂量测量(请求myRequest);
}
ServiceConfiguration.class:

[…]
@配置
公共类服务配置{
@豆子
公共服务(){
return-Feign.builder()
.编码器(新的JacksonEncoder())
.decoder(新的JacksonDecoder())
.client(DestinationHelper.getHttpClient(Service.DESTINATION_NAME))
.target(Service.class,DestinationHelper.getUrl(Service.DESTINATION_NAME));
}
}
DestinationHelper.class:

[…]
公共类DestinationHelper{
/**
*@返回带有{@code destinationName}的目标URL
*/
公共静态字符串getUrl(字符串destinationName){
返回目的地接受器
.getDestination(destinationName)
.getUri()
.toString();
}
/**
*@返回为目标预配置的HTTP客户端
*/
公共静态ApacheHttpClient getHttpClient(最终字符串destinationName){
返回新的ApacheHttpClient(HttpClientAccessor.getHttpClient(destinationName));
}
}

在服务实现中是否实现了一些错误甚至缺失的内容?根据错误日志,服务似乎无法真正建立到目标的正确连接。

这里的问题是,在应用程序启动期间,还没有可用的
RequestContext

解决此问题的方法是将相关代码包装到
RequestContextExecutor
中,如下所示:

@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));
    };
}