Вызов OData из SFSF: не удалось преобразовать ответ в ODataFeed: возникла исключительная ситуация EdmSimpleTypeException - PullRequest
1 голос
/ 27 февраля 2020

После проблемы из вопроса: Создание 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 выдает ошибку при попытке получить к ней доступ.) следующий сервлет, который включает запрос:

@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 (ответ. json)

Любая помощь будет оценена.

1 Ответ

2 голосов
/ 05 марта 2020

Файл 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
    

К сожалению, ошибки не обрабатываются изящно и отключат любую попытку десериализации. Поскольку это происходит в сторонней библиотеке Olin go из SAP Service SDK , мы не можем исправить или изменить ее или предоставить значимый обходной путь.

You необходимо убедиться, что используется правильный файл метаданных, от начала до конца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...