Closed jingweiz2017 closed 1 month ago
Hi @jingweiz2017,
This indeed looks like a missing feature from our side. Thanks for reaching out to us and planning to contribute :)
Could you please raise your PR so that we can take a look?
Regards, Kavitha
Please refer to the latest commit(20b8c2a). Thanks.
Issue Description
This is an issue between DwC and SAP Cloud SDK's integration for "Principal Propagation" scenario when DwC is using IAS for authentication.
I think originally SAP Cloud SDK had approuter in mind. So it would expect an "Authorization" Header in the incoming request header. For DwC, it keep this dwc-ias-jwt token in the header in case needed. This dwc-ias-jwt token is the one I should use as "Authorization" header which later on can be passed onto remote service as user_token(x-user-token) for token exchange and authorization(principal propagation scenario). But SDK is not able to retrieve this dwc auth token and continue with the rest of the work.
After some research, I find this issue looks a lot like https://github.com/SAP/cloud-sdk-java/pull/337. However, I think that fix was targeting DwC xsuaa token key (dwc-jwt). For the case of DwC+IAS, the key would be "dwc-ias-jwt".
I have prepared a PR to enhance https://github.com/SAP/cloud-sdk-java/pull/337 so that dwc-ias-jwt will be covered as well.
Important information:
Your code
private class DwCCdsRequestHeaderFacade implements RequestHeaderFacade { private final CdsRuntime runtime;
}
com.sap.cds.services.impl.ContextualizedServiceException: Header provider 'OAuth2HeaderProvider' threw an exception: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: com.sap.cloud.sdk.cloudplatform.exception.CloudPlatformException: Failed to get the current user token., at com.sap.cds.services.impl.ServiceImpl.dispatch(ServiceImpl.java:256), at com.sap.cds.services.impl.ServiceImpl.emit(ServiceImpl.java:177), at com.sap.cds.services.ServiceDelegator.emit(ServiceDelegator.java:33), at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source), at java.base/java.lang.reflect.Method.invoke(Unknown Source), at com.sap.cds.services.impl.cds.TypedCqnServiceInvocationHandler.invoke(TypedCqnServiceInvocationHandler.java:70), at jdk.proxy2/jdk.proxy2.$Proxy56.emit(Unknown Source), at com.sap.cds.adapter.odata.v4.processors.CdsProcessor.query(CdsProcessor.java:401), at com.sap.cds.adapter.odata.v4.processors.CdsProcessor.get(CdsProcessor.java:357), at com.sap.cds.adapter.odata.v4.processors.CdsProcessor.delegateRequest(CdsProcessor.java:230), at com.sap.cds.adapter.odata.v4.processors.CdsProcessor.lambda$processRequest$1(CdsProcessor.java:156), at com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.lambda$run$3(RequestContextRunnerImpl.java:213), at com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.run(RequestContextRunnerImpl.java:272), at com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.run(RequestContextRunnerImpl.java:212), at com.sap.cds.adapter.odata.v4.processors.CdsProcessor.processRequest(CdsProcessor.java:153), at com.sap.cds.adapter.odata.v4.processors.CdsProcessor.lambda$processRequest$0(CdsProcessor.java:144), at com.sap.cds.services.impl.runtime.ChangeSetContextRunnerImpl.open(ChangeSetContextRunnerImpl.java:70), at com.sap.cds.services.impl.runtime.ChangeSetContextRunnerImpl.run(ChangeSetContextRunnerImpl.java:49), at com.sap.cds.adapter.odata.v4.processors.CdsProcessor.processRequest(CdsProcessor.java:143), at com.sap.cds.adapter.odata.v4.processors.AbstractODataProcessor.processRequest(AbstractODataProcessor.java:164), at com.sap.cds.adapter.odata.v4.processors.FastODataProcessor.processEntities(FastODataProcessor.java:161), at com.sap.cds.adapter.odata.v4.processors.OlingoProcessor.readEntityCollection(OlingoProcessor.java:116), at org.apache.olingo.server.core.ODataDispatcher.handleEntityCollectionDispatching(ODataDispatcher.java:542), at org.apache.olingo.server.core.ODataDispatcher.handleEntityDispatching(ODataDispatcher.java:524), at org.apache.olingo.server.core.ODataDispatcher.handleResourceDispatching(ODataDispatcher.java:154), at org.apache.olingo.server.core.ODataDispatcher.dispatch(ODataDispatcher.java:120), at org.apache.olingo.server.core.ODataHandlerImpl.processInternal(ODataHandlerImpl.java:174), at org.apache.olingo.server.core.ODataHandlerImpl.process(ODataHandlerImpl.java:95), at org.apache.olingo.server.core.ODataHttpHandlerImpl.process(ODataHttpHandlerImpl.java:80), at org.apache.olingo.server.core.ODataHttpHandlerImpl.process(ODataHttpHandlerImpl.java:94), at com.sap.cds.adapter.odata.v4.CdsODataV4Servlet.lambda$service$0(CdsODataV4Servlet.java:132), at com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.lambda$run$3(RequestContextRunnerImpl.java:213), at com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.run(RequestContextRunnerImpl.java:272), at com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.run(RequestContextRunnerImpl.java:212), at com.sap.cds.adapter.odata.v4.CdsODataV4Servlet.service(CdsODataV4Servlet.java:90), at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658), at com.sap.cds.framework.spring.config.adapter.ServletAdapterRestController.handleRequest(ServletAdapterRestController.java:30), at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51), at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089), at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979), at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014), at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903), at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564), at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885), at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658), at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195), at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140), at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51), at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164), at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140), at com.sap.dwc.util.headers.http.DwcHeaderRequestFilter.doFilterInternal(DwcHeaderRequestFilter.java:43), at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116), at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164), at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140), at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108), at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479), at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapUnsecured$1(ObservationFilterChainDecorator.java:90), at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:219), at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191), at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113), at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195), at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113), at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74), at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230), at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352), at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268), at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164), at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140), at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100), at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116), at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164), at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140), at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93), at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116), at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164), at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140), at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113), at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116), at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164), at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140), at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201), at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116), at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164), at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140), at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167), at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90), at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483), at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115), at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93), at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74), at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:663), at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:731), at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344), at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389), at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63), at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:904), at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741), at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52), at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190), at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659), at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63), at java.base/java.lang.Thread.run(Unknown Source), Caused by: com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationAccessException: Header provider 'OAuth2HeaderProvider' threw an exception: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: com.sap.cloud.sdk.cloudplatform.exception.CloudPlatformException: Failed to get the current user token., at com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination.getHeadersFromHeaderProviders(DefaultHttpDestination.java:205), at com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination.getHeaders(DefaultHttpDestination.java:174), at com.sap.cloud.sdk.frameworks.apachehttpclient5.ApacheHttpClient5Wrapper.wrapRequest(ApacheHttpClient5Wrapper.java:81), at com.sap.cloud.sdk.frameworks.apachehttpclient5.ApacheHttpClient5Wrapper.doExecute(ApacheHttpClient5Wrapper.java:61), at org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:87), at org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:55), at org.apache.hc.client5.http.classic.HttpClient.executeOpen(HttpClient.java:183), at org.springframework.http.client.HttpComponentsClientHttpRequest.executeInternal(HttpComponentsClientHttpRequest.java:99), at org.springframework.http.client.AbstractStreamingClientHttpRequest.executeInternal(AbstractStreamingClientHttpRequest.java:70), at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66), at org.springframework.http.client.BufferingClientHttpRequestWrapper.executeInternal(BufferingClientHttpRequestWrapper.java:77), at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48), at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66), at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:889), at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:740), at com.sap.cloud.sdk.services.openapi.apiclient.ApiClient.invokeAPI(ApiClient.java:739), at com.sap.ngl.pc.reuseservices.businessloggingservice.api.LoggingApi.writeLog(LoggingApi.java:270), at com.sap.ngl.pc.handler.BusinessLoggingDemoServiceHandler.readEmployee(BusinessLoggingDemoServiceHandler.java:90), at com.sap.cds.services.impl.handlerregistry.HandlerRegistryTools$DescribedHandler.process(HandlerRegistryTools.java:165), at com.sap.cds.services.impl.ServiceImpl.lambda$createOnHandlerChain$4(ServiceImpl.java:269), at com.sap.cds.services.impl.ServiceImpl.dispatch(ServiceImpl.java:236), ... 101 more, Caused by: com.sap.cloud.sdk.cloudplatform.resilience.ResilienceRuntimeException: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: com.sap.cloud.sdk.cloudplatform.exception.CloudPlatformException: Failed to get the current user token., at com.sap.cloud.sdk.cloudplatform.resilience4j.Resilience4jDecorationStrategy.lambda$decorateCallable$3(Resilience4jDecorationStrategy.java:195), at io.vavr.control.Try.onFailure(Try.java:659), at com.sap.cloud.sdk.cloudplatform.resilience4j.Resilience4jDecorationStrategy.lambda$decorateCallable$4(Resilience4jDecorationStrategy.java:194), at io.vavr.control.Try.of(Try.java:75), at io.vavr.control.Try.ofCallable(Try.java:105), at com.sap.cloud.sdk.cloudplatform.resilience4j.Resilience4jDecorationStrategy.lambda$decorateSupplier$1(Resilience4jDecorationStrategy.java:160), at com.sap.cloud.sdk.cloudplatform.resilience.ResilienceDecorationStrategy.executeSupplier(ResilienceDecorationStrategy.java:103), at com.sap.cloud.sdk.cloudplatform.resilience.ResilienceDecorator.executeSupplier(ResilienceDecorator.java:201), at com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2Service.retrieveAccessToken(OAuth2Service.java:141), at com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2HeaderProvider.getHeaders(OAuth2HeaderProvider.java:34), at com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination.getHeadersFromHeaderProviders(DefaultHttpDestination.java:199), ... 121 more, Caused by: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: com.sap.cloud.sdk.cloudplatform.exception.CloudPlatformException: Failed to get the current user token., at com.sap.cloud.sdk.cloudplatform.thread.ThreadContextExecutor.execute(ThreadContextExecutor.java:246), at com.sap.cloud.sdk.cloudplatform.thread.DefaultThreadContextExecutorService.lambda$decorate$0(DefaultThreadContextExecutorService.java:72), at com.sap.cds.integration.cloudsdk.decorator.CdsThreadContextDecorator.lambda$decorateCallable$0(CdsThreadContextDecorator.java:36), at com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.run(RequestContextRunnerImpl.java:272), at com.sap.cds.integration.cloudsdk.decorator.CdsThreadContextDecorator.lambda$decorateCallable$1(CdsThreadContextDecorator.java:34), at java.base/java.util.concurrent.FutureTask.run(Unknown Source), at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), ... 1 more, Caused by: com.sap.cloud.sdk.cloudplatform.exception.CloudPlatformException: Failed to get the current user token., at com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2Service.executeUserExchangeFlow(OAuth2Service.java:254), at com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2Service.lambda$retrieveAccessToken$0(OAuth2Service.java:149), at com.sap.cloud.sdk.cloudplatform.resilience4j.Resilience4jDecorationStrategy.lambda$decorateCallable$2(Resilience4jDecorationStrategy.java:179), at io.github.resilience4j.bulkhead.Bulkhead.lambda$decorateCallable$5(Bulkhead.java:173), at com.sap.cloud.sdk.cloudplatform.thread.ThreadContextExecutor.call(ThreadContextExecutor.java:297), at com.sap.cloud.sdk.cloudplatform.thread.ThreadContextExecutor.execute(ThreadContextExecutor.java:240), ... 8 more, Caused by: com.sap.cloud.sdk.cloudplatform.security.exception.AuthTokenAccessException: Failed to decode JWT bearer: no JWT bearer present in 'Authorization' header of request., at com.sap.cloud.sdk.cloudplatform.security.AuthTokenDecoder.decode(AuthTokenDecoder.java:68), at io.vavr.control.Try.flatMapTry(Try.java:490), at io.vavr.control.Try.flatMap(Try.java:472), at com.sap.cloud.sdk.cloudplatform.security.DefaultAuthTokenFacade.tryGetCurrentToken(DefaultAuthTokenFacade.java:50), at com.sap.cloud.sdk.cloudplatform.security.AuthTokenAccessor.tryGetCurrentToken(AuthTokenAccessor.java:123), at com.sap.cloud.sdk.cloudplatform.security.AuthTokenAccessor.getCurrentToken(AuthTokenAccessor.java:104), at io.vavr.control.Try.of(Try.java:75), at io.vavr.control.Try.ofCallable(Try.java:105), at com.sap.cloud.sdk.cloudplatform.thread.Property.lambda$decorateCallable$1(Property.java:135), at com.sap.cloud.sdk.cloudplatform.thread.ThreadContext.setPropertyIfAbsent(ThreadContext.java:70), at com.sap.cloud.sdk.cloudplatform.security.AuthTokenThreadContextListener.afterInitialize(AuthTokenThreadContextListener.java:63), at com.sap.cloud.sdk.cloudplatform.thread.ThreadContextExecutor.notifyAfterInitialize(ThreadContextExecutor.java:322), at com.sap.cloud.sdk.cloudplatform.thread.ThreadContextExecutor.call(ThreadContextExecutor.java:295), ... 9 more
{"msg":"Header provider 'OAuth2HeaderProvider' threw an exception: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: com.sap.cloud.sdk.cloudplatform.exception.CloudPlatformException: Failed to get the current user token. (service 'BusinessLoggingDemoService', event 'READ', entity 'BusinessLoggingDemoService.SimpleMaterialDocumentHeaderVO')","tenant_id":"3375cd1a-014e-4d1b-a82f-beac0b3d8eaf","dt.trace_sampled":"true","level":"ERROR","written_ts":"1724228338819361040","logger":"com.sap.cds.adapter.odata.v4.processors.CdsProcessor","thread":"http-nio-8080-exec-3","type":"log","dt.span_id":"05c77ffaf02d7fa1","exception_message":"Header provider 'OAuth2HeaderProvider' threw an exception: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: com.sap.cloud.sdk.cloudplatform.exception.CloudPlatformException: Failed to get the current user token. (service 'BusinessLoggingDemoService', event 'READ', entity 'BusinessLoggingDemoService.SimpleMaterialDocumentHeaderVO')","dt.trace_id":"ce697d1b9a6c0f9b8109ffbf02b009f7","exception_type":"com.sap.cds.services.impl.ContextualizedServiceException","correlation_id":"de94c7c6-a113-4847-9ae0-3b1d1a1fc865","written_at":"2024-08-21T08:18:58.819Z","stacktrace":["com.sap.cds.services.impl.ContextualizedServiceException: Header provider 'OAuth2HeaderProvider' threw an exception: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: com.sap.cloud.sdk.cloudplatform.exception.CloudPlatformException: Failed to get the current user token.","\tat com.sap.cds.services.impl.ServiceImpl.dispatch(ServiceImpl.java:256)","\tat com.sap.cds.services.impl.ServiceImpl.emit(ServiceImpl.java:177)","\tat com.sap.cds.services.ServiceDelegator.emit(ServiceDelegator.java:33)","\tat java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)","\tat java.base/java.lang.reflect.Method.invoke(Unknown Source)","\tat com.sap.cds.services.impl.cds.TypedCqnServiceInvocationHandler.invoke(TypedCqnServiceInvocationHandler.java:70)","\tat jdk.proxy2/jdk.proxy2.$Proxy56.emit(Unknown Source)","\tat com.sap.cds.adapter.odata.v4.processors.CdsProcessor.query(CdsProcessor.java:401)","\tat com.sap.cds.adapter.odata.v4.processors.CdsProcessor.get(CdsProcessor.java:357)","\tat com.sap.cds.adapter.odata.v4.processors.CdsProcessor.delegateRequest(CdsProcessor.java:230)","\tat com.sap.cds.adapter.odata.v4.processors.CdsProcessor.lambda$processRequest$1(CdsProcessor.java:156)","\tat com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.lambda$run$3(RequestContextRunnerImpl.java:213)","\tat com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.run(RequestContextRunnerImpl.java:272)","\tat com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.run(RequestContextRunnerImpl.java:212)","\tat com.sap.cds.adapter.odata.v4.processors.CdsProcessor.processRequest(CdsProcessor.java:153)","\tat com.sap.cds.adapter.odata.v4.processors.CdsProcessor.lambda$processRequest$0(CdsProcessor.java:144)","\tat com.sap.cds.services.impl.runtime.ChangeSetContextRunnerImpl.open(ChangeSetContextRunnerImpl.java:70)","\tat com.sap.cds.services.impl.runtime.ChangeSetContextRunnerImpl.run(ChangeSetContextRunnerImpl.java:49)","\tat com.sap.cds.adapter.odata.v4.processors.CdsProcessor.processRequest(CdsProcessor.java:143)","\tat com.sap.cds.adapter.odata.v4.processors.AbstractODataProcessor.processRequest(AbstractODataProcessor.java:164)","\tat com.sap.cds.adapter.odata.v4.processors.FastODataProcessor.processEntities(FastODataProcessor.java:161)","\tat com.sap.cds.adapter.odata.v4.processors.OlingoProcessor.readEntityCollection(OlingoProcessor.java:116)","\tat org.apache.olingo.server.core.ODataDispatcher.handleEntityCollectionDispatching(ODataDispatcher.java:542)","\tat org.apache.olingo.server.core.ODataDispatcher.handleEntityDispatching(ODataDispatcher.java:524)","\tat org.apache.olingo.server.core.ODataDispatcher.handleResourceDispatching(ODataDispatcher.java:154)","\tat org.apache.olingo.server.core.ODataDispatcher.dispatch(ODataDispatcher.java:120)","\tat org.apache.olingo.server.core.ODataHandlerImpl.processInternal(ODataHandlerImpl.java:174)","\tat org.apache.olingo.server.core.ODataHandlerImpl.process(ODataHandlerImpl.java:95)","\tat org.apache.olingo.server.core.ODataHttpHandlerImpl.process(ODataHttpHandlerImpl.java:80)","\tat org.apache.olingo.server.core.ODataHttpHandlerImpl.process(ODataHttpHandlerImpl.java:94)","\tat com.sap.cds.adapter.odata.v4.CdsODataV4Servlet.lambda$service$0(CdsODataV4Servlet.java:132)","\tat com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.lambda$run$3(RequestContextRunnerImpl.java:213)","\tat com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.run(RequestContextRunnerImpl.java:272)","\tat com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.run(RequestContextRunnerImpl.java:212)","\tat com.sap.cds.adapter.odata.v4.CdsODataV4Servlet.service(CdsODataV4Servlet.java:90)","\tat jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)","\tat com.sap.cds.framework.spring.config.adapter.ServletAdapterRestController.handleRequest(ServletAdapterRestController.java:30)","\tat org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51)","\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)","\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)","\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)","\tat org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)","\tat jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)","\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)","\tat jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)","\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)","\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)","\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)","\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)","\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)","\tat com.sap.dwc.util.headers.http.DwcHeaderRequestFilter.doFilterInternal(DwcHeaderRequestFilter.java:43)","\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)","\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)","\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)","\tat org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)","\tat org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479)","\tat org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapUnsecured$1(ObservationFilterChainDecorator.java:90)","\tat org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:219)","\tat org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)","\tat org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)","\tat org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195)","\tat org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)","\tat org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)","\tat org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230)","\tat org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)","\tat org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)","\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)","\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)","\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)","\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)","\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)","\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)","\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)","\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)","\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)","\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)","\tat org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113)","\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)","\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)","\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)","\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)","\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)","\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)","\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)","\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)","\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)","\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)","\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)","\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)","\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)","\tat org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:663)","\tat org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:731)","\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)","\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)","\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)","\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:904)","\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)","\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)","\tat org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)","\tat org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)","\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)","\tat java.base/java.lang.Thread.run(Unknown Source)","Caused by: com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationAccessException: Header provider 'OAuth2HeaderProvider' threw an exception: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: com.sap.cloud.sdk.cloudplatform.exception.CloudPlatformException: Failed to get the current user token.","\tat com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination.getHeadersFromHeaderProviders(DefaultHttpDestination.java:205)","\tat com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination.getHeaders(DefaultHttpDestination.java:174)","\tat com.sap.cloud.sdk.frameworks.apachehttpclient5.ApacheHttpClient5Wrapper.wrapRequest(ApacheHttpClient5Wrapper.java:81)","\tat com.sap.cloud.sdk.frameworks.apachehttpclient5.ApacheHttpClient5Wrapper.doExecute(ApacheHttpClient5Wrapper.java:61)","\tat org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:87)","\tat org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:55)","\tat org.apache.hc.client5.http.classic.HttpClient.executeOpen(HttpClient.java:183)","\tat org.springframework.http.client.HttpComponentsClientHttpRequest.executeInternal(HttpComponentsClientHttpRequest.java:99)","\tat org.springframework.http.client.AbstractStreamingClientHttpRequest.executeInternal(AbstractStreamingClientHttpRequest.java:70)","\tat org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66)","\tat org.springframework.http.client.BufferingClientHttpRequestWrapper.executeInternal(BufferingClientHttpRequestWrapper.java:77)","\tat org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)","\tat org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66)","\tat org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:889)","\tat org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:740)","\tat com.sap.cloud.sdk.services.openapi.apiclient.ApiClient.invokeAPI(ApiClient.java:739)","\tat com.sap.ngl.pc.reuseservices.businessloggingservice.api.LoggingApi.writeLog(LoggingApi.java:270)","\tat com.sap.ngl.pc.handler.BusinessLoggingDemoServiceHandler.readEmployee(BusinessLoggingDemoServiceHandler.java:90)","\tat com.sap.cds.services.impl.handlerregistry.HandlerRegistryTools$DescribedHandler.process(HandlerRegistryTools.java:165)","\tat com.sap.cds.services.impl.ServiceImpl.lambda$createOnHandlerChain$4(ServiceImpl.java:269)","\tat com.sap.cds.services.impl.ServiceImpl.dispatch(ServiceImpl.java:236)","\t... 101 more","Caused by: com.sap.cloud.sdk.cloudplatform.resilience.ResilienceRuntimeException: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: com.sap.cloud.sdk.cloudplatform.exception.CloudPlatformException: Failed to get the current user token.","\tat com.sap.cloud.sdk.cloudplatform.resilience4j.Resilience4jDecorationStrategy.lambda$decorateCallable$3(Resilience4jDecorationStrategy.java:195)","\tat io.vavr.control.Try.onFailure(Try.java:659)","\tat com.sap.cloud.sdk.cloudplatform.resilience4j.Resilience4jDecorationStrategy.lambda$decorateCallable$4(Resilience4jDecorationStrategy.java:194)","\tat io.vavr.control.Try.of(Try.java:75)","\tat io.vavr.control.Try.ofCallable(Try.java:105)","\tat com.sap.cloud.sdk.cloudplatform.resilience4j.Resilience4jDecorationStrategy.lambda$decorateSupplier$1(Resilience4jDecorationStrategy.java:160)","\tat com.sap.cloud.sdk.cloudplatform.resilience.ResilienceDecorationStrategy.executeSupplier(ResilienceDecorationStrategy.java:103)","\tat com.sap.cloud.sdk.cloudplatform.resilience.ResilienceDecorator.executeSupplier(ResilienceDecorator.java:201)","\tat com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2Service.retrieveAccessToken(OAuth2Service.java:141)","\tat com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2HeaderProvider.getHeaders(OAuth2HeaderProvider.java:34)","\tat com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination.getHeadersFromHeaderProviders(DefaultHttpDestination.java:199)","\t... 121 more","Caused by: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: com.sap.cloud.sdk.cloudplatform.exception.CloudPlatformException: Failed to get the current user token.","\tat com.sap.cloud.sdk.cloudplatform.thread.ThreadContextExecutor.execute(ThreadContextExecutor.java:246)","\tat com.sap.cloud.sdk.cloudplatform.thread.DefaultThreadContextExecutorService.lambda$decorate$0(DefaultThreadContextExecutorService.java:72)","\tat com.sap.cds.integration.cloudsdk.decorator.CdsThreadContextDecorator.lambda$decorateCallable$0(CdsThreadContextDecorator.java:36)","\tat com.sap.cds.services.impl.runtime.RequestContextRunnerImpl.run(RequestContextRunnerImpl.java:272)","\tat com.sap.cds.integration.cloudsdk.decorator.CdsThreadContextDecorator.lambda$decorateCallable$1(CdsThreadContextDecorator.java:34)","\tat java.base/java.util.concurrent.FutureTask.run(Unknown Source)","\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)","\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)","\t... 1 more","Caused by: com.sap.cloud.sdk.cloudplatform.exception.CloudPlatformException: Failed to get the current user token.","\tat com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2Service.executeUserExchangeFlow(OAuth2Service.java:254)","\tat com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2Service.lambda$retrieveAccessToken$0(OAuth2Service.java:149)","\tat com.sap.cloud.sdk.cloudplatform.resilience4j.Resilience4jDecorationStrategy.lambda$decorateCallable$2(Resilience4jDecorationStrategy.java:179)","\tat io.github.resilience4j.bulkhead.Bulkhead.lambda$decorateCallable$5(Bulkhead.java:173)","\tat com.sap.cloud.sdk.cloudplatform.thread.ThreadContextExecutor.call(ThreadContextExecutor.java:297)","\tat com.sap.cloud.sdk.cloudplatform.thread.ThreadContextExecutor.execute(ThreadContextExecutor.java:240)","\t... 8 more","Caused by: com.sap.cloud.sdk.cloudplatform.security.exception.AuthTokenAccessException: Failed to decode JWT bearer: no JWT bearer present in 'Authorization' header of request.","\tat com.sap.cloud.sdk.cloudplatform.security.AuthTokenDecoder.decode(AuthTokenDecoder.java:68)","\tat io.vavr.control.Try.flatMapTry(Try.java:490)","\tat io.vavr.control.Try.flatMap(Try.java:472)","\tat com.sap.cloud.sdk.cloudplatform.security.DefaultAuthTokenFacade.tryGetCurrentToken(DefaultAuthTokenFacade.java:50)","\tat com.sap.cloud.sdk.cloudplatform.security.AuthTokenAccessor.tryGetCurrentToken(AuthTokenAccessor.java:123)","\tat com.sap.cloud.sdk.cloudplatform.security.AuthTokenAccessor.getCurrentToken(AuthTokenAccessor.java:104)","\tat io.vavr.control.Try.of(Try.java:75)","\tat io.vavr.control.Try.ofCallable(Try.java:105)","\tat com.sap.cloud.sdk.cloudplatform.thread.Property.lambda$decorateCallable$1(Property.java:135)","\tat com.sap.cloud.sdk.cloudplatform.thread.ThreadContext.setPropertyIfAbsent(ThreadContext.java:70)","\tat com.sap.cloud.sdk.cloudplatform.security.AuthTokenThreadContextListener.afterInitialize(AuthTokenThreadContextListener.java:63)","\tat com.sap.cloud.sdk.cloudplatform.thread.ThreadContextExecutor.notifyAfterInitialize(ThreadContextExecutor.java:322)","\tat com.sap.cloud.sdk.cloudplatform.thread.ThreadContextExecutor.call(ThreadContextExecutor.java:295)","\t... 9 more"]}