首页 > 解决方案 > 使用 Cloud SDK 定义 S4HANA BAPI 调用的 SCP 目标

问题描述

我正在寻找一种在本地和使用 Cloud SDK 在 SAP Cloud Platform 上调用 S4HANA 本地 BAPI 的方法。问题是如何定义 RFC 目标,就像 HTTP 目标一样。

我还遇到了 JCo class not found 异常,找不到合适的解决方法。

本地

在 HTTP 目标中,我可以提供如下环境变量:

set destinations=[{name: "destName", url: "URL", username: "username", password: "password"}]

但不清楚如何定义 RFC 目标,哪些属性是必需的,如 jco 属性。

SCP云铸造厂

我在 SAP Cloud Platform 上创建了一个 RFC 目标。 在此处输入图像描述 但是我找不到一种方法来装饰这个目的地以涉及 Cloud SDK 中的其他属性,就像 HTTP 目的地一样。

Destination destination = DestinationAccessor.getDestination(destName);
destination.asHttp().decorate(DefaultErpHttpDestination::new);  

请注意,当我进行 bapi 调用时,RfcDestination 是不可接受的,仅需要类型 Destination。RfcDestination 不是接口 Destination 的实现类。

在此处输入图像描述

JCO 类未找到异常

java.lang.NoClassDefFoundError: com/sap/conn/jco/JCo

将 SAP Java Build Pack 与 Spring 引导一起使用时存在一个已知问题。我手动将 jar 文件 sapjco3.jar 添加到项目类路径中。但它仍然没有工作。

https://answers.sap.com/questions/12935437/call-op-bapi-using-cloud-sdk.html

更新

运行时未找到 JCO 类异常

  1. 你说的对。我在 SCP 上部署了应用程序,然后调用我提供的其余 API 来调用 S4HANA On-premise 系统的 BAPI。然后我在运行时得到了这个异常。
  2. 我正在使用 Spring Boot 应用程序。
  3. Spring boot 项目由 SAP Cloud SDK spring archetype 生成。
  4. 请参阅下面的错误堆栈跟踪。
  5. 右键单击我的项目->构建路径->配置构建路径->选择库选项卡->添加外部jar
  6. 我将我的应用程序部署为 Jar 文件。

异常堆栈跟踪

2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: com/sap/conn/jco/JCoException
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.cloudplatform.servlet.RequestAccessorFilter.lambda$doFilter$1(RequestAccessorFilter.java:71)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.cloudplatform.thread.AbstractThreadContextExecutor.lambda$execute$0(AbstractThreadContextExecutor.java:317)
2020-04-09T01:55:46.220+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.cloudplatform.thread.ThreadContextCallable.call(ThreadContextCallable.java:247)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.cloudplatform.thread.AbstractThreadContextExecutor.execute(AbstractThreadContextExecutor.java:319)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.cloudplatform.servlet.RequestAccessorFilter.doFilter(RequestAccessorFilter.java:71)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
2020-04-09T01:55:46.221+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at java.lang.Thread.run(Thread.java:836)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR Caused by: java.lang.NoClassDefFoundError: com/sap/conn/jco/JCoException
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.s4hana.connectivity.rfc.BapiTransactionFactory.createJCoTransaction(BapiTransactionFactory.java:33)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.s4hana.connectivity.rfc.AbstractTransactionFactory.createTransaction(AbstractTransactionFactory.java:39)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.s4hana.connectivity.rfc.RemoteFunctionRequestExecutor.execute(RemoteFunctionRequestExecutor.java:41)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.s4hana.connectivity.rfc.BapiRequest.execute(BapiRequest.java:79)
2020-04-09T01:55:46.222+0000 [APP/PROC/WEB/0] ERR   at com.bosch.test.service.CostCenterBapiService.getCostCenters(CostCenterBapiService.java:48)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at com.bosch.test.controllers.CostCenterBapiController.getCostCenterBapi(CostCenterBapiController.java:23)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at java.lang.reflect.Method.invoke(Method.java:498)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   ... 47 more
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR Caused by: java.lang.ClassNotFoundException: com.sap.conn.jco.JCoException
2020-04-09T01:55:46.223+0000 [APP/PROC/WEB/0] ERR   at java.net.URLClassLoader.findClass(URLClassLoader.java:444)
2020-04-09T01:55:46.224+0000 [APP/PROC/WEB/0] ERR   at java.lang.ClassLoader.loadClass(ClassLoader.java:480)
2020-04-09T01:55:46.224+0000 [APP/PROC/WEB/0] ERR   at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92)
2020-04-09T01:55:46.224+0000 [APP/PROC/WEB/0] ERR   at java.lang.ClassLoader.loadClass(ClassLoader.java:413)
2020-04-09T01:55:46.224+0000 [APP/PROC/WEB/0] ERR   ... 64 more

我要强调的一件事是 SAP 提供的官方文档说“无法将 SAP Java 连接器与 Spring Boot 应用程序一起使用”。

https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/3cee866c27ec4492b789b10c5d52d94b.html

具有非 Spring Boot 应用程序的 SAP Java 连接器

我基于 SAP Cloud SDK 原型 scp-cf-tomee 创建了一个新项目,并尝试调用 bapi。我认为 JCo 问题已经消失,但是在调用 Bapi 时我得到了一个新的异常“未设置用户信息”。有人有类似的问题,但似乎还没有解决方案。

https://answers.sap.com/questions/12969692/getting-access-to-the-sap-java-connector-in-cloud.html

2020-04-09T02:25:37.146+0000 [APP/PROC/WEB/0] ERR java.lang.IllegalStateException: User information is not set.
2020-04-09T02:25:37.146+0000 [APP/PROC/WEB/0] ERR   at com.sap.xs.security.UserInfoHolder.getUserInfo(UserInfoHolder.java:48)
2020-04-09T02:25:37.146+0000 [APP/PROC/WEB/0] ERR   at com.sap.core.connectivity.jco.kotyo.cf.auth.CFTenantProvider.getCurrentTenant(CFTenantProvider.java:21)
2020-04-09T02:25:37.146+0000 [APP/PROC/WEB/0] ERR   at com.sap.conn.jco.rt.TenantContextManager.getTenantContext(TenantContextManager.java:36)
2020-04-09T02:25:37.146+0000 [APP/PROC/WEB/0] ERR   at com.sap.conn.jco.rt.DefaultDestinationManager.searchDestination(DefaultDestinationManager.java:376)
2020-04-09T02:25:37.146+0000 [APP/PROC/WEB/0] ERR   at com.sap.conn.jco.rt.DefaultDestinationManager.getDestinationInstance(DefaultDestinationManager.java:109)
2020-04-09T02:25:37.146+0000 [APP/PROC/WEB/0] ERR   at com.sap.conn.jco.JCoDestinationManager.getDestination(JCoDestinationManager.java:56)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.s4hana.connectivity.rfc.JCoTransaction.<init>(JCoTransaction.java:99)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.s4hana.connectivity.rfc.BapiTransactionFactory.createJCoTransaction(BapiTransactionFactory.java:33)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.s4hana.connectivity.rfc.AbstractTransactionFactory.createTransaction(AbstractTransactionFactory.java:39)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.s4hana.connectivity.rfc.RemoteFunctionRequestExecutor.execute(RemoteFunctionRequestExecutor.java:41)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.s4hana.connectivity.rfc.BapiRequest.execute(BapiRequest.java:79)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.bosch.bapi.service.CostCenterBapiService.getCostCenters(CostCenterBapiService.java:44)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.bosch.bapi.CostCenterBapiServlet.doGet(CostCenterBapiServlet.java:30)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:65)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.cloudplatform.servlet.RequestAccessorFilter.lambda$doFilter$1(RequestAccessorFilter.java:71)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.cloudplatform.thread.AbstractThreadContextExecutor.lambda$execute$0(AbstractThreadContextExecutor.java:317)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.cloudplatform.thread.ThreadContextCallable.call(ThreadContextCallable.java:247)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.cloudplatform.thread.AbstractThreadContextExecutor.execute(AbstractThreadContextExecutor.java:319)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.cloudplatform.servlet.RequestAccessorFilter.doFilter(RequestAccessorFilter.java:71)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpCachingHeaderFilter.doFilter(HttpCachingHeaderFilter.java:83)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpSecurityHeadersFilter.doFilter(HttpSecurityHeadersFilter.java:41)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.filters.RestCsrfPreventionFilter.doFilter(RestCsrfPreventionFilter.java:125)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
2020-04-09T02:25:37.147+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at com.sap.xs.java.valves.ErrorReportValve.invoke(ErrorReportValve.java:66)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at ch.qos.logback.access.tomcat.LogbackValve.invoke(LogbackValve.java:256)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at com.sap.xs.security.TenantIdValve.invoke(TenantIdValve.java:33)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at com.sap.xs.security.UserInfoValve.invoke(UserInfoValve.java:19)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at com.sap.xs.statistics.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:43)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at com.sap.xs.logging.catalina.RuntimeInfoValve.invoke(RuntimeInfoValve.java:40)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
2020-04-09T02:25:37.148+0000 [APP/PROC/WEB/0] ERR   at java.lang.Thread.run(Thread.java:836)

装饰目的地

我同意你的解释。也许不需要将其作为 Http 目的地。但由于 SAP Java 连接器问题,我被卡住了。

本地 RFC 目标定义

实际上我不知道 RFC 目标需要哪些属性。如果我只使用 HTTP,我会得到 http 状态 404 和服务未找到异常。

标签: sap-cloud-platformsap-cloud-sdkbapis4hana

解决方案


感谢您在这里提出这个问题。我可以识别您问题中的不同方面,因此在下文中单独讨论它们。

JCO 类未找到异常

请就以下问题提供更多信息:

  • 我了解您java.lang.NoClassDefFoundError: com/sap/conn/jco/JCo在将应用程序部署到 SCP 后在运行时收到一个。我的理解正确吗?
  • 我知道您使用的是 Spring Boot 应用程序,对吗?
  • 您是否使用过 SAP Cloud SDK 原型?
  • 请在此处附上申请日志以供进一步参考。
  • 您能否详细说明一下您是如何将 sapjco3.jar 添加到项目类路径中的?
  • 您将应用程序部署为 jar 还是 war?

通过环境变量创建 RFC 目标

我了解您很难理解如何在环境变量中指定 RFC 目标。请问您已经分别尝试过哪些具体问题(错误消息等)您面临哪些问题?

不能修饰 RFC 目标以涉及其他属性

您正确指出,考虑到 HTTP 目标上的其他属性,SAP Cloud SDK 能够丰富请求标头。因此,您需要HttpDestination像这样装饰您的实例:

Destination destination = DestinationAccessor.getDestination(destName);
destination.asHttp().decorate(DefaultErpHttpDestination::new);  

我了解您的问题对于 RFC 目的地的工作方式。据我判断,SAP 提供的 Java 连接器 (JCO) 库无论如何都会查看目标属性。因此,我认为在 RFC 目标领域中没有必要这样做。如果您不同意,请您更准确地概述您的要求。

BapiRequest 接受目的地,而不是 RfcDestination

BapiRequest::execute我理解你的问题,你对期望 aDestination而不是a感到惊讶RfcDestination。乍一看确实令人惊讶,但是,这是因为 SAP Cloud SDK 还支持调用包装为 SOAP API 的 BAPI。这通过HttpDestination. 对于您的具体用例,只需使用DestinationAccessor.getDestination("xyz")该返回值并将其传递给execute方法即可。您无需担心其他任何事情。


推荐阅读