Вызов SFSF OData: не удалось преобразовать ответ в ODataFeed: произошло исключение EdmSimpleTypeException
Следуя проблеме из вопроса: сгенерировать VDM для SFSF с использованием Java в SAP Cloud SDK: сгенерированный URI неверен
Я создал виртуальную модель данных из файла метаданных из SFSF, используя плагин Maven и SAP Cloud SDK для Java.
Генератор работает правильно, однако сгенерированный URI не соответствует ожиданиям SFSF:
Созданный URI: /odata/v2/SFODataSet
Ожидаемый URI: / odata / v2 или / odata / v2 / JobRequisition
(Объект SFODataSet не существует, и SFSF выдает ошибку при попытке доступа к нему).
В любом случае, я продолжаю и меняю DEFAULT_SERVICE_PATH в сгенерированных файлах на / odata / v2 и создаю следующий сервлет, который включает запрос:
@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());
}
}
}
Это запрашивает одну вакансию (с идентификатором 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)
- Ответ JSON от SFSF (response.json)
Любая помощь будет оценена.
1 ответ
Файл EDMX, который вы использовали для создания модуля VDM, несовместим с ответами удаленной службы OData. Попросите разработчика службы OData предоставить обновленный файл метаданных. Вы также можете попробовать скачать его прямо сhttp://[URL]/odata/v2/$metadata
.
Я обнаружил, что примерно половина прикрепленного вами образца полезной нагрузки JSON несовместима с файлом EDMX, опубликованным в API Business Hub.
Ответ содержит неизвестные свойства объекта, которые не могут быть сопоставлены с метаданными:
"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
К сожалению, ошибки не обрабатываются должным образом, и любая попытка десериализации будет остановлена. Поскольку это происходит в сторонней библиотеке OlingoSAP Service SDK, мы не можем исправить или изменить это или предоставить значимый обходной путь.
Вам нужно будет убедиться, что используется правильный файл метаданных от начала до конца.