5

我正在尝试使用https://blogs.sap.com/2017/05/21/step-4-with-sap-中所述的 VDM 使用 OData 服务从 S/4HANA Cloud 1805 系统中读取数据s4hana-cloud-sdk-calling-an-odata-service/。目标使用基本身份验证。

示例调用:

final ErpConfigContext context = new ErpConfigContext("...");
return new DefaultQualityInspectionDataService().getAllInspectionLot().select(...).execute(context);

这至少在 S/4HANA Cloud SDK 版本 1.9.4 之前一直有效。由于更新到 2.0.0,由于以下异常,目的地无法再使用:

2018 06 18 12:43:55#+00#ERROR#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/app-application].[com.sap.cloud...Servlet]##anonymous#https-jsse-nio-8041-exec-3#na#a078260ed#app#web#a078260ed#na#na#na#na#Allocate exception for servlet [com.sap.cloud...Servlet] com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationAccessException: Failed to get ConnectivityConfiguration: no RequestContext available. Have you correctly configured a RequestContextFactory or have you wrapped your logic in a RequestContextExecutor when executing background tasks that are not triggered by a request?
at com.sap.cloud.sdk.cloudplatform.connectivity.ScpNeoDestinationFacade.getConnectivityConfiguration(ScpNeoDestinationFacade.java:60)
at com.sap.cloud.sdk.cloudplatform.connectivity.ScpNeoDestinationFacade.getDestinationConfiguration(ScpNeoDestinationFacade.java:108)
at com.sap.cloud.sdk.cloudplatform.connectivity.ScpNeoDestinationFacade.getGenericDestination(ScpNeoDestinationFacade.java:183)
at com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor.getGenericDestination(DestinationAccessor.java:136)
at com.sap.cloud.sdk.s4hana.connectivity.ErpConfigContext.<init>(ErpConfigContext.java:218)
at com.sap.cloud.sdk.s4hana.connectivity.ErpConfigContext.<init>(ErpConfigContext.java:367)
at com.sap.cloud.sdk.s4hana.connectivity.ErpConfigContext.<init>(ErpConfigContext.java:442)
at com.sap.cloud...Servlet.<init>(...Servlet.java:31)
...
at java.lang.Thread.run(Thread.java:808)

调用 HTTP servlet 时会立即发生异常,即使目标尚未使用也是如此。ErpConfigContext 似乎有问题。从 2.0.0 开始,Destination 必须使用 ErpConfigContext 而不是 ErpEndpoint 进行配置。我已阅读迁移指南(https://blogs.sap.com/2018/06/05/migration-guide-moving-to-version-2.0.0-of-the-sap-s4hana-cloud-sdk/)关于 ErpConfigContext 和 RequestContext 处理,但该解决方案不适用于我的应用程序,因为我不必使用 RequestContextListener 并且它仍然有效。

此外,在使用 1.9.4 时,使用 ErpConfigContext 使用相同的编码,所以问题似乎是更新到 2.xx 更新到 2.1.0 也没有解决问题。

我在几个 OData 服务中遇到了这个问题。

除了等待新的 SDK 更新外,这个问题有什么解决方案吗?

4

1 回答 1

1

ErpConfigContext您是否可以在 servlet 的构造函数中初始化?您可以尝试new ErpConfigContext("...")在 servlet 的doGet()方法中调用吗?这里的问题可能是RequestContextservlet 的过滤器链中唯一发生的初始化。

于 2018-06-18T19:33:42.580 回答