0

I am working on a POC currently where I need to call a BAPI inside S/4HANA On-Premise from a cloud application using Java. For this I am using SAP Cloud SDK.

For initial setup I followed these steps from the guide "Set Up Your Local Infrastructure to Develop with SAP Cloud SDK".

I am trying to call BAPI_COSTCENTER_GETLIST1 from my application. Here is the code snippet:

final BapiRequestResult resultGetCostCenters = new BapiRequest("BAPI_COSTCENTER_GETLIST1")
 .withExporting("CONTROLLINGAREA", "BAPI0012_GEN-CO_AREA", "0001")
 .withTable("COSTCENTERLIST", "BAPI0012_CCLIST").end()
 .withTableAsReturn("BAPIRET2")
 .execute(destination);

And here the declaration of destination variable:

Map<String, String> destinationProps = new HashMap<String, String>();
destinationProps.put("Name", "SampleDestination");
destinationProps.put("URL", "abcdefg.wdf.sap.corp");
destinationProps.put("Type", "HTTP");
destinationProps.put("Password", "<system_password>");
destinationProps.put("Authentication", "BasicAuthentication");
destinationProps.put("User", "<system_user>");

final Destination destination= new DefaultDestination(destinationProps);

But from execute(), one exception is being thrown which says:

org.apache.http.ProtocolException: Target host is not specified

Here is the complete stack trace:

com.sap.cloud.sdk.s4hana.connectivity.exception.RequestExecutionException: BapiRequest
      com.sap.csc.CostCenterCreationServlet.retrieveCostCenterList(CostCenterCreationServlet.java:69)
      failed [total: N/A, build payload: 0.243255s, execute request: N/A, parse
      response: N/A]
com.sap.cloud.sdk.s4hana.connectivity.rfc.exception.RemoteFunctionException:
      com.sap.cloud.sdk.s4hana.connectivity.exception.RequestExecutionException:
      BapiRequest com.sap.csc.CostCenterCreationServlet.retrieveCostCenterList(CostCenterCreationServlet.java:69)
      failed [total: N/A, build payload: 0.243255s, execute request: N/A, parse
      response: N/A]
    at com.sap.cloud.sdk.s4hana.connectivity.rfc.SoapTransaction.execute(SoapTransaction.java:70)
    at com.sap.cloud.sdk.s4hana.connectivity.rfc.RemoteFunctionRequestExecutor.execute(RemoteFunctionRequestExecutor.java:46)
    at com.sap.cloud.sdk.s4hana.connectivity.rfc.BapiRequest.execute(BapiRequest.java:78)
    at com.sap.csc.CostCenterCreationServlet.retrieveCostCenterList(CostCenterCreationServlet.java:73)
    at com.sap.csc.CostCenterCreationServlet.doGet(CostCenterCreationServlet.java:39)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.sap.cloud.sdk.cloudplatform.servlet.RequestAccessorFilter.lambda$doFilter$1(RequestAccessorFilter.java:71)
    at com.sap.cloud.sdk.cloudplatform.thread.AbstractThreadContextExecutor.lambda$execute$0(AbstractThreadContextExecutor.java:317)
    at com.sap.cloud.sdk.cloudplatform.thread.ThreadContextCallable.call(ThreadContextCallable.java:247)
    at com.sap.cloud.sdk.cloudplatform.thread.AbstractThreadContextExecutor.execute(AbstractThreadContextExecutor.java:319)
    at com.sap.cloud.sdk.cloudplatform.servlet.RequestAccessorFilter.doFilter(RequestAccessorFilter.java:71)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpCachingHeaderFilter.doFilter(HttpCachingHeaderFilter.java:80)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpSecurityHeadersFilter.doFilter(HttpSecurityHeadersFilter.java:41)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.filters.RestCsrfPreventionFilter.doFilter(RestCsrfPreventionFilter.java:113)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: com.sap.cloud.sdk.s4hana.connectivity.exception.RequestExecutionException: BapiRequest com.sap.csc.CostCenterCreationServlet.retrieveCostCenterList(CostCenterCreationServlet.java:69) failed [total: N/A, build payload: 0.243255s, execute request: N/A, parse response: N/A]
    at com.sap.cloud.sdk.s4hana.connectivity.ErpHttpRequestExecutor.execute(ErpHttpRequestExecutor.java:662)
    at com.sap.cloud.sdk.s4hana.connectivity.ErpHttpRequestExecutor.execute(ErpHttpRequestExecutor.java:410)
    at com.sap.cloud.sdk.s4hana.connectivity.rfc.SoapTransaction.execute(SoapTransaction.java:65)
    ... 44 more
Caused by: org.apache.http.client.ClientProtocolException
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:187)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
    at com.sap.cloud.sdk.cloudplatform.connectivity.HttpClientWrapper.execute(HttpClientWrapper.java:94)
    at com.sap.cloud.sdk.s4hana.connectivity.ErpHttpRequestExecutor.execute(ErpHttpRequestExecutor.java:646)
    ... 46 more
Caused by: org.apache.http.ProtocolException: Target host is not specified
    at org.apache.http.impl.conn.DefaultRoutePlanner.determineRoute(DefaultRoutePlanner.java:71)
    at org.apache.http.impl.client.InternalHttpClient.determineRoute(InternalHttpClient.java:125)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)

I have tried providing http or https at the starting of the URL. But still nothing seems to work. Though I am new in this but I assume calling BAPI is different than calling any HTTP API. In that case how to approach ?

Thanks in advance.

Sandra Rossi
  • 11,934
  • 5
  • 22
  • 48
arunava04
  • 67
  • 9
  • Did you try `destinationProps.put("URL", "http://abcdefg.wdf.sap.corp");` ? – Smile Jan 20 '20 at 08:55
  • yes. It returns connection timeout. – arunava04 Jan 20 '20 at 09:07
  • Are you able to access this web service using Soap Ui or some tool other than java? Is any firewall or something preventing access to this service in your machine? – Smile Jan 20 '20 at 09:12
  • I tried pinging from my command prompt and it returns a response. – arunava04 Jan 20 '20 at 09:43
  • Is the error occurring in a deployed cloud application or do you see the error locally? – Alexander Dümont Jan 20 '20 at 13:18
  • I think `abcdefg.wdf.sap.corp` is only available in your intranet. You need to configure a _Cloud Connector_ which acts as a proxy between _SCP_ and _S4HANA_. – Alexander Dümont Jan 20 '20 at 13:22
  • @AlexanderDümont, I see the error locally. I have not deployed it. So do we need to call it with `http` or `https` at the beginning ? – arunava04 Jan 21 '20 at 03:46
  • @AlexanderDümont - Please note that I am still running this code locally from SAP intranet (connected to corporate network) and hence, there is no need to cloud connector right now... Ofcourse we will use it via cloud connector when we deploy it on SCP. Right now, we want to run this program locally within intranet – arunava04 Jan 21 '20 at 04:09
  • @arunava04: Is your target system running SAP S/4HANA On-Premise or SAP S/4HANA Cloud edition? – Emdee Jan 21 '20 at 08:18
  • @Emdee, It is On-Premise. – arunava04 Jan 21 '20 at 08:21
  • What you wanna do is technically not supported: You want to invoke a BAPI *from your localhost* via the transport protocol RFC using the JCo library (used behind the scenes via the SAP Cloud SDK). The usage of JCo requires to run your app on SAP Cloud Platform. Then, you can leverage the `DestinationAccessor` like so: `DestinationAccessor.tryGetDestination("my-destination-name")` instead of creating your `Destination` manually. – Emdee Jan 22 '20 at 10:07
  • @Emdee, Thank you very much for your cooperation. I will try to get it done after deploying. – arunava04 Jan 23 '20 at 06:50

0 Answers0