在我们的解决方案中,我们在S / 4HANA端调用基于CDS的自定义ODATA API,其中包括函数导入。为此,我们通过maven-plugin为ODATA接口生成了Java服务。调用的函数导入基于BOPF,并且生成的实现未返回与SAP Cloud SDK期望相符的结果,即所生成的JSON对象具有名为函数import的成员。
我们检查了是否可以更改生成的ODATA实现,但在S / 4HANA中没有配置可以更改。
在进行调用时,我已经调试了SDK的实现,并在FunctionImportResponseParser中找到了以下代码,从而做出了以下假设:
<T> T getEntityFromResponse(
final InputStream responseContent,
final String edmFunctionImportName,
final Class<? extends T> entityJavaType )
throws IOException,
IllegalArgumentException
{
final JsonObject responseJsonObject = getJsonObjectFromResponse(responseContent);
(X) if( responseJsonObject.has(edmFunctionImportName) ) {
final JsonElement jsonElement = responseJsonObject.get(edmFunctionImportName);
return getEntityFromJsonElement(jsonElement, entityJavaType);
}
return null;
}
由于用(X)标记的if语句以及函数导入直接返回不将其包装在期望成员中的对象的事实,结果返回null。
所以对我来说,问题是,SDK是否应该也可以处理这种情况,或者错误是否在于S / 4HANA API是否未返回符合ODATA的结果。