无法使用用于服务开发的 SDK 从 S/4 系统检索数据

Unable to retrieve data from S/4 system using SDK for service development

我正在使用 Olingo 构建 OData v2 服务,该服务部分通过自定义网关 OData 服务从 S/4 系统获取数据,部分来自 Cloud Platform Neo 并将两者结合。为此,我使用 S/4 Cloud SDK (https://help.sap.com/viewer/p/SDK_FOR_SERVICE_DEVELOPMENT) 中包含的 SDK 进行服务开发。

这是我的问题:当尝试从我的 Olingo 服务调用我的网关 OData 服务时,它给我一个错误 "No error field found in JSON"。经过一些尝试,我找到了堆栈跟踪,但它也没有真正帮助我,因为它只是说元数据请求没有任何原因失败。这是我的堆栈跟踪: 谁能告诉我这可能是什么原因(凭证和 URL 被双重检查)和/或帮助我解决这个问题?

提前致谢!

编辑

问题似乎与目标配置有关。我尝试了一个 HTTP 目的地而不是 HTTPS,现在它正在工作......我仍然想让它也能在 HTTPS 上工作。

注意:此答案仅适用于S/4HANA云系统。

这似乎与SSL证书验证有关。您的 Java 信任库可能缺少相关的服务器证书。能否尝试如下禁用服务器证书的验证:

  • 要手动覆盖信任链,您可以在目标配置上设置一个特殊标志。为避免本地 Neo 部署环境中不受信任的证书出现任何进一步问题,请更改目标配置文件 ./config_master/service.destinations/destinations/ErpQueryEndpoint:
  • 中的 TrustAll 标志
TrustAll=TRUE
  • 如果您 运行 在 Cloud Foundry 部署环境中遇到同样的问题并且您使用的是环境变量方法,请调整目标环境变量以额外包含属性映射:
[{"name": "ErpQueryEndpoint", "properties": [{"key": "TrustAll", "value": "true"}], "url": "https://my-url", "username": "USER", "password": "PASSWORD"}]
  • 如果您已部署应用程序并在 Neo 或 Cloud Foundry 环境中使用目标服务,请在 Cloud Platform 主控室中向目标添加新的 属性。在第一个输入(下拉)字段中输入 TrustAll,在第二个字段中输入 TRUE

请注意,这应该仅用于测试目的,因为它会禁用服务器证书的验证。 决不能在生产中使用它

当连接到 SAP Cloud Platform 上的 S/4HANA 云系统时,您应该不会遇到此问题,因为默认信任库已经包含相关条目。在其他情况下,要解决此类问题,您必须 add the certificate to your local trust store.

另一种选择是您尝试在 ODataQueryBuilder:

上注册自定义错误处理程序
ODataQueryBuilder builder = 
    ODataQueryBuilder
    .withEntity(...)
    .errorHandler(new ODataVdmErrorResultHandler());

builder.build().execute();

这应该能让您更好地了解潜在的错误。