Skip to content

DwC Auth Token not available (DwC + IAS) #557

@jingweiz2017

Description

@jingweiz2017

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 #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 #337 so that dwc-ias-jwt will be covered as well.

Important information:

  • Your code
public HttpDestination getBusinessLoggingDestination() {
    Try<Destination> tryGetDestination = DestinationAccessor.tryGetDestination(BUSINESS_LOGGING);

    if (tryGetDestination.isSuccess()) {
       HttpDestination httpDestination = tryGetDestination.get().asHttp();
       logger.debug("business log url: {}",httpDestination.getUri());
       return httpDestination;
    }

    try {
      var options = ServiceBindingDestinationOptions
        .forService(ServiceIdentifier.of(BUSINESS_LOGGING))
        .withOption(BtpServiceOptions.BusinessLoggingOptions.WRITE_API)
        .onBehalfOf(OnBehalfOf.NAMED_USER_CURRENT_TENANT)
        .build();
      HttpDestination destination = ServiceBindingDestinationLoader.defaultLoaderChain().getDestination(options);
      DestinationAccessor.prependDestinationLoader(
        (name, option) -> name.equals(BUSINESS_LOGGING) ?
        Try.of(() -> destination) :
        Try.failure(new DestinationNotFoundException(name))
      );
      return destination;
    } catch (Exception e) {
      String message = "Failed to get destination for business-logging caused by: " + e.getMessage();
      logger.error(message);
      throw new IllegalStateException(message, e);
    }
  }
  • Expected outcome
    The token exchange will be conducted successfully.
  • Actual outcome
    "Failed to get the current user token" error was thrown.
  • Steps attempted to resolve the issue
    The root cause is dwc-ias-jwt in header is not picked up by the SAP Cloud SDK as a auth token. Used a workaround to prove the case as below:
RequestHeaderAccessor.setHeaderFacade(new DwCCdsRequestHeaderFacade(context.getCdsRuntime()));

private class DwCCdsRequestHeaderFacade implements RequestHeaderFacade {
    private final CdsRuntime runtime;

    DwCCdsRequestHeaderFacade(CdsRuntime runtime) {
      this.runtime = runtime;
    }

    @Override
    public Try<RequestHeaderContainer> tryGetRequestHeaders() {
      final String DWC_IAS_JWT = "dwc-ias-jwt";
      final String bearerPrefix = "bearer ";

      return Try.of(() -> {
        final Map<String, String> headers = RequestContext.getCurrent(runtime).getParameterInfo().getHeaders();

        logger.debug(String.format("dwc-ias-jwt contained cdsruntime? %s", headers.containsKey(DWC_IAS_JWT)));
        logger.debug(String.format("dwc-ias-jwt in DwCCdsRequestHeaderFacade : %s", headers.get(DWC_IAS_JWT)));
        Map<String, String> heads = new HashMap<>(headers);
        heads.put(HttpHeaders.AUTHORIZATION, bearerPrefix + headers.get(DWC_IAS_JWT));
        return DefaultRequestHeaderContainer.fromSingleValueMap(heads);
      });
    }
  }
  • In case of issues with any of our VDMs:
    • What happens when a request is performed directly via an HTTP client tool such as Postman?
    • In case that succeeds please provide details on the request such as URL, query parameters, header parameters, prerequisite requests (e.g. CSRF token), etc.
  • Potentially missing information (open questions you might have)

Impact / Priority

Affected development phase: Development

Impact: Blocked

Timeline:

Error Message

Call Stacks:

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

Application Logs

{"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"]}

Maven Dependency Tree

<dependencyManagement>
    <dependencies>
      <!-- CDS SERVICES -->
      <dependency>
        <groupId>com.sap.cds</groupId>
        <artifactId>cds-services-bom</artifactId>
        <version>${cds.services.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <!-- CDS REMOTE SERVICE -->
      <dependency>
        <groupId>com.sap.cds</groupId>
        <artifactId>cds-feature-remote-odata</artifactId>
        <scope>runtime</scope>
      </dependency>

      <!-- OData -->
      <dependency>
          <groupId>com.sap.cloud.sdk.datamodel</groupId>
          <artifactId>odata-core</artifactId>
          <version>${odata.core.version}</version>
      </dependency>
      <dependency>
        <groupId>com.sap.cloud.sdk.datamodel</groupId>
        <artifactId>openapi-core</artifactId>
        <version>${openapi.core.version}</version>
      </dependency>
      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>${lombok.version}</version>
          <scope>provided</scope>
      </dependency>
      <dependency>
          <groupId>javax.inject</groupId>
          <artifactId>javax.inject</artifactId>
          <version>${javax.inject.version}</version>
          <scope>provided</scope>
      </dependency>

      <!-- Spring Boot -->
      <dependency>
        <groupId>com.sap.sgs</groupId>
        <artifactId>security-patched-spring-boot-dependencies</artifactId>
        <version>${spring.boot.sgs-patch.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>com.sap.cloud.sdk</groupId>
        <artifactId>sdk-bom</artifactId>
        <version>${sap.cloud.sdk.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>com.sap.cloud.sdk.cloudplatform</groupId>
        <artifactId>resilience</artifactId>
        <version>${sap.cloud.sdk.version}</version>
      </dependency>

      <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>${assertj-core.version}</version>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>${spring.boot.version}</version>
        <scope>test</scope>
        <exclusions>
          <exclusion>
            <groupId>com.vaadin.external.google</groupId>
            <artifactId>android-json</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <!-- Observability & Monitoring -->
      <dependency>
        <groupId>com.sap.hcp.cf.logging</groupId>
        <artifactId>cf-java-logging-support-logback</artifactId>
        <version>${logging.support.version}</version>
      </dependency>

      <dependency>
        <groupId>com.sap.cloud.sdk.cloudplatform</groupId>
        <artifactId>connectivity-dwc</artifactId>
        <version>${sap.cloud.sdk.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

Project Details

SAP Internal project(NGL)

  • SDK Version: 5.11.0
  • Link to GitHub repo:
  • Project type, for example:
    • CAP Project
    • SDK Maven Archetype
    • None of the above:
  • Platform:
    • Cloud Foundry
    • Deploy with Confidence (Cloud Foundry)
    • Deploy with Confidence (KYMA)
    • None of the above:

Checklist

  • Checked out the documentation and Stack Overflow
  • Description provided with all relevant information
  • Exception and stack trace provided
  • Attached debug logs
  • Attached dependency tree
  • Provided Cloud SDK version & link to relevant source code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions