温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - SFSF OData call: Failed to convert response into ODataFeed: An 'EdmSimpleTypeException' occurred
java sap-cloud-platform sap-cloud-sdk

java - SFSF OData调用:无法将响应转换为ODataFeed:发生“ EdmSimpleTypeException”

发布于 2020-05-15 18:05:26

从问题中解决以下问题: 在SAP Cloud SDK中使用Java为SFSF生成VDM:生成的URI错误

使用Maven插件和SAP Cloud SDK for Java从SFSF 元数据文件生成了虚拟数据模型

生成器正常工作,但是生成的URI不是SFSF期望的:

  • 生成的URI:/ odata / v2 / SFODataSet

  • 预期的URI:/ odata / v2或/ odata / v2 / JobRequisition

(SFODataSet实体不存在,并且SFSF尝试访问它时给出错误)。

无论如何,我继续将生成的文件中的DEFAULT_SERVICE_PATH更改为/ odata / v2,并创建包含查询的以下servlet:

@WebServlet("/req")
public class JobReqServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;
    private static final Logger logger = LoggerFactory.getLogger(JobReqServlet.class);

    private final ErpHttpDestination destination = DestinationAccessor.getDestination("sfsf-sdk-dest").asHttp()
            .decorate(DefaultErpHttpDestination::new);


    @Override
    protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
            throws ServletException, IOException {
        try {
            long id = 2126;
            final JobRequisition jobReqs = new DefaultRCMJobRequisitionService()
                .getJobRequisitionByKey(id)
                .execute(destination);
            response.getWriter().write("Done!");
        } catch (final ODataException e) {
            logger.error(e.getMessage(), e);
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            response.getWriter().write(e.getMessage());
        }
    }
}

这查询单个作业申请(ID为2126)。不需要添加.withServicePath()选项,因为它已经更改。

但是,在运行应用程序时,等待10-20秒后出现内部服务器错误

在日志中,我可以看到以下内容:

  • 正确提取了目的地
  • HTTP请求正确
  • SFSF用正确的数据响应

但是在接收到数据之后,就会出现错误:

"com.sap.cloud.sdk.odatav2.connectivity.ODataQuery","thread":"http-nio-0.0.0.0-8080-exec-3","level":"ERROR","categories":[],"msg":"Failed to convert response into ODataFeed: An exception of type 'EdmSimpleTypeException' occurred." }

此处找到云端硬盘

  • 调试日志(SDKapplogs.txt)
  • SFSF的JSON响应(response.json)

任何帮助,将不胜感激。

查看更多

提问者
kepair
被浏览
34
Alexander Dümont 2020-03-05 20:40

您用来生成VDM的EDMX文件与远程OData服务响应不兼容。请要求OData服务的维护者提供最新的元数据文件。您也可以尝试直接从下载http://[URL]/odata/v2/$metadata

我发现您附加的JSON示例有效负载中约有一半与API Business Hub上发布的EDMX文件不兼容。

  • 响应中包含无法与元数据匹配的未知实体属性:

    "departmentCode": null
    "locationCode": null
    "divisionCode": null
    "costCenterCode": null
    "instrGen": null
    "legalEntityCode": null
    "templateName": "Standard Job Requisition"
    "routeMap": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/routeMap"}}
    "motorVeh": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/motorVeh"}}
    "payType": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/payType"}}
    "requiredTravel": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/requiredTravel"}}
    "state": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/state"}}
    "jobProfile": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/jobProfile"}}
    "division_obj": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/division_obj"}}
    "legalEntity_obj": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/legalEntity_obj"}}
    "jobReqFwdCandidates": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/jobReqFwdCandidates"}}
    "status": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/status"}}
    "budgeted": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/budgeted"}}
    "jobApplications": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/jobApplications"}}
    "shiftSchedule": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/shiftSchedule"}}
    "interviewGuide": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/interviewGuide"}}
    "jobAnalyzerReportingData": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/jobAnalyzerReportingData"}}
    "assessment": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/assessment"}}
    "adCode": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/adCode"}}
    "flsa": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/flsa"}}
    "costCenter_obj": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/costCenter_obj"}}
    "filter1": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/filter1"}}
    "filter2": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/filter2"}}
    "filter3": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/filter3"}}
    "eeoJobCat": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/eeoJobCat"}}
    "location_objlist": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/location_objlist"}}
    "accommo": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/accommo"}}
    "experienceReq": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/experienceReq"}}
    "relocationPack": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/relocationPack"}}
    "rsnVacancy": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/rsnVacancy"}}
    "location_obj": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/location_obj"}}
    "competencies": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/competencies"}}
    "department_obj": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/department_obj"}}
    "PD": {"__deferred": {"uri": "https://[URL]/odata/v2/JobRequisition(2126L)/PD"}}
    
  • 响应包含实体属性的意外空值,不允许将其设为空值:

    "closedDateTime": null
    "timeToFill": null
    "jobReqGUId": null
    "overallScaleName": null
    "lastModifiedProxyUserId": null
    "positionNumber": null
    "age": null
    

不幸的是,错误没有得到适当处理,并且将关闭任何反序列化尝试。由于这是在SAP Service SDK的第三方Olingo库中发生的,因此我们无法修复或更改它,也无法提供有意义的解决方法。

您需要确保从头到尾使用正确的元数据文件。