0

I'm following Deep Dive 9 with SAP S/4HANA Cloud SDK: Tenant and User Aware Microservices Communication via REST APIs and already set up communications between Converter service and Exchange Rate service.

Deep Dive 9

However, when I try to run

https://approuter-converter-accountID.cfapps.us10.hana.ondemand.com/converter?sum=100&from=EUR&to=USD

, it returns Internal Server Error.

I've checked the log in Converter app:

2018-06-19T15:42:15.86+1000 [APP/PROC/WEB/0] OUT Destination: ScpCfDestination(destinationType=HTTP, name=app, description=null, propertiesByName={Type=HTTP, ProxyType=Internet, Authentication=AppToAppSSO, URL=https://approuter-exchangerate-<accountid2>.cfapps.eu10.hana.ondemand.com, Name=app})
2018-06-19T15:42:15.86+1000 [APP/PROC/WEB/0] OUT HttpClient: com.sap.cloud.sdk.cloudplatform.connectivity.HttpClientWrapper@5e49142a
2018-06-19T15:42:16.53+1000 [APP/PROC/WEB/0] OUT HttpResponse: HTTP/1.1 200 OK [Cache-Control: no-cache, no-store, must-revalidate, Content-Length: 512, Date: Tue, 19 Jun 2018 05:42:16 GMT, Set-Cookie: locationAfterLogin=%2Fexchange-rate; Path=/; HttpOnly, X-Frame-Options: SAMEORIGIN, X-Request-Id: jil9hsq1, X-Vcap-Request-Id: cbd2ec1a-e318-4a88-56dd-68b6f5183aa2] org.apache.http.conn.BasicManagedEntity@1d9b5223
2018-06-19T15:42:16.53+1000 [APP/PROC/WEB/0] OUT HttpEntity: org.apache.http.conn.BasicManagedEntity@1d9b5223
2018-06-19T15:42:16.53+1000 [APP/PROC/WEB/0] OUT Rates Json: <html><head><link rel="shortcut icon" href="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /><script>document.cookie="fragmentAfterLogin="+encodeURIComponent(location.hash)+";path=/";location="https://p1942866225trial.authentication.eu10.hana.ondemand.com/oauth/authorize?response_type=code&client_id=sb-exchangerate-<accountId2>!t3509&redirect_uri=https%3A%2F%2Fapprouter-exchangerate-<accountId2>.cfapps.eu10.hana.ondemand.com%2Flogin%2Fcallback"</script></head></html>

I can see that HttpResponse is successful. But Rates Json (which is the returning entity) seems not working.

I've followed all steps in the blog but no idea why it returns error like this. Can you please suggest what could be the reason?

Update: I was using one S-user and one P-user in the scenario.

After I change and use 2 P-users, I can see that the response is in the converter log. What is wrong with using S-user?

However, the response is not displayed in browser. Instead, it shows error: Internal Server Error and in the log written:

{ "written_at":"2018-06-21T02:25:30.359Z","written_ts":39256458075633,"component_id":"e8cb8a72-6ca9-4bcb-86db-c4a3a6addfe0","component_name":"converter","DCComponent":"","organization_name":"-","component_type":"application","space_name":"dev","component_instance":"0","organization_id":"-","correlation_id":"-","CSNComponent":"","space_id":"a17affa3-0b14-4c07-af21-6a2afd1f40bd","Application":"converter","container_id":"10.0.137.152","type":"log","logger":"org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/].[com.mycompany.ConverterServlet]","thread":"http-bio-0.0.0.0-8080-exec-3","level":"ERROR","categories":[],"msg":"Servlet.service() for servlet [com.mycompany.ConverterServlet] in context with path [] threw exception","stacktrace":["java.io.IOException: Attempted read from closed stream."," at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:165)","  at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:135)"," at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)","    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)"," at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)"," at java.io.InputStreamReader.read(InputStreamReader.java:184)","    at java.io.Reader.read(Reader.java:140)","  at org.apache.http.util.EntityUtils.toString(EntityUtils.java:225)","   at org.apache.http.util.EntityUtils.toString(EntityUtils.java:306)","   at com.mycompany.ConverterServlet.doGet(ConverterServlet.java:65)","    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)","  at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)","  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)"," at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)"," at org.apache.tomee.webservices.CXFJAXRSFilter.doFilter(CXFJAXRSFilter.java:83)","  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)"," at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)"," at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)","    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)"," at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)"," at com.sap.cloud.sdk.cloudplatform.servlet.RequestContextServletFilter$1.execute(RequestContextServletFilter.java:215)","   at com.sap.cloud.sdk.cloudplatform.servlet.Executable.call(Executable.java:19)","   at com.sap.cloud.sdk.cloudplatform.servlet.Executable.call(Executable.java:9)","    at com.sap.cloud.sdk.cloudplatform.servlet.RequestContextCallable.call(RequestContextCallable.java:78)","   at com.sap.cloud.sdk.cloudplatform.servlet.RequestContextServletFilter.doFilter(RequestContextServletFilter.java:217)","    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)"," at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)"," at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpCachingHeaderFilter.doFilter(HttpCachingHeaderFilter.java:52)","    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)"," at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)"," at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpSecurityHeadersFilter.doFilter(HttpSecurityHeadersFilter.java:37)","    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)"," at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)"," at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)","  at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)","    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)","   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)","  at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)","  at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)","  at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)","   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)","  at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)","    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)","  at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)","   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)","  at org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:176)","  at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)","  at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)","    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)","   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)","  at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)","  at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)","  at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)"," at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)"," at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)","   at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)"," at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)"," at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)"," at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)","   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)","   at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)","   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)","    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)"," at com.sap.xs.java.valves.ErrorReportValve.invoke(ErrorReportValve.java:66)","  at ch.qos.logback.access.tomcat.LogbackValve.invoke(LogbackValve.java:191)","   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)"," at com.sap.xs.security.UserInfoValve.invoke(UserInfoValve.java:23)","   at com.sap.xs.statistics.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:43)","    at com.sap.xs.logging.catalina.RuntimeInfoValve.invoke(RuntimeInfoValve.java:40)"," at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683)","   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)","   at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)","   at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)","   at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)","  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)","   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)","   at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)","    at java.lang.Thread.run(Thread.java:836)"] }
Minh Tri Le
  • 91
  • 10

1 Answers1

4

please, ensure that the called application (exchange rate) is secured properly. For that, call the app via its app router directly: exchange rate application router URL/exchange-rate and check if you are getting the correct payload after you enter your credentials.

If not, please, check and modify your xs-security-exchangerate.json and manifest-approuter-exchangerate.yml accordingly based on your account data. In case of changes, re-run the deployment and service binding for the exchange rate service.

Best regards, Ekaterina

k3na
  • 121
  • 3