#sap-cloud-sdk
#sap-cloud-sdk
Вопрос:
С прошлой недели мы начали использовать SDK версии 3.34.1 (а также протестировали это с 3.35.0). Когда мы отправляем запрос на ИСПРАВЛЕНИЕ в службу SAP, мы получаем HTTP 204 No-Content
ответ от нашей службы SAP (шлюз SAP). Когда SDK пытается прочитать этот ответ, он пытается проанализировать тело ответа, которое является пустым. Это приводит к следующему исключению:
2020-12-17 16:13:51.767 ERROR 106363 --- [ut.sap.cases]-0] .s.c.s.d.o.c.r.ODataRequestResultGeneric :
Failed to buffer HTTP response. Unable to buffer HTTP entity.
java.lang.IllegalArgumentException: Wrapped entity may not be null
at org.apache.http.util.Args.notNull(Args.java:54)
at org.apache.http.entity.HttpEntityWrapper.<init>(HttpEntityWrapper.java:59)
at org.apache.http.entity.BufferedHttpEntity.<init>(BufferedHttpEntity.java:59)
at com.sap.cloud.sdk.datamodel.odata.client.request.ODataRequestResultGeneric.lambda$getHttpResponse$4f00ca4e$1(ODataRequestResultGeneric.java:180)
at io.vavr.control.Try.of(Try.java:75)
at com.sap.cloud.sdk.datamodel.odata.client.request.ODataRequestResultGeneric.getHttpResponse(ODataRequestResultGeneric.java:180)
at com.sap.cloud.sdk.datamodel.odata.client.request.ODataHealthyResponseValidator.requireHealthyResponse(ODataHealthyResponseValidator.java:44)
at io.vavr.control.Try.andThenTry(Try.java:250)
at com.sap.cloud.sdk.datamodel.odata.client.request.ODataRequestGeneric.tryExecute(ODataRequestGeneric.java:194)
at com.sap.cloud.sdk.datamodel.odata.client.request.ODataRequestGeneric.tryExecuteWithCsrfToken(ODataRequestGeneric.java:225)
at com.sap.cloud.sdk.datamodel.odata.client.request.ODataRequestUpdate.execute(ODataRequestUpdate.java:136)
at com.sap.cloud.sdk.datamodel.odata.helper.FluentHelperUpdate.executeRequest(FluentHelperUpdate.java:372)
at com.alliander.gvrn.pmd.adapter.out.sap.cases.SapCasesClient.updateCase(SapCasesClient.java:103)
at com.alliander.gvrn.pmd.adapter.out.sap.cases.SapCasesClient.persistOn(SapCasesClient.java:81)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at ....
Мы используем сгенерированный типизированный клиент OData V2, который создается путем предоставления наших файлов EDMX в соответствии с документацией SDK.
Ниже приведен фрагмент кода функции, вызывающей службу. Это matrixCase
автоматически созданный объект. ИСПРАВЛЕНИЕ OData правильно обрабатывается службой SAP.
private void updateCase(final ExternalId caseId, final PMDFlow pmdFlow, String jwtToken) {
final HttpDestination sapMatrix = httpDestinationProvider.providePrincipalPropagationDestination(jwtToken);
// "Create matrixCase object with key
MatrixCase matrixCase = MatrixCase.builder()
.psReference(caseId.getValue())
.build();
// Set PmdAppControl explicitly, otherwise the generated client doesn't know which fields are updated.
matrixCase.setPMDAppControl(pmdFlow.getSapNotation());
try {
casesService
.updateMatrixCase(matrixCase)
.executeRequest(sapMatrix);
} catch (ODataException e) {
OdataLogger.logODataException(e);
throw new SapClientException(e);
}
}
Мы обновились до SDK 3.34.1 из-за других проблем, однако до того, как мы использовали 3.32.0, и я не помню, чтобы эта проблема была в версии 3.32.0
Есть идеи?
Дэнни
Комментарии:
1. Привет, Дэнни, это исключение выдается или оно только регистрируется? Мы видим, что облачный sdk регистрирует это как ошибку, поэтому это приводит к неправильным толкованиям, но это предполагаемое поведение, и cloud sdk адаптирует уровень журнала, чтобы исправить путаницу. Поэтому, если он не выбрасывается, я говорю, что все в порядке.
2. Я на самом деле не знаю. Он выбрасывается / регистрируется перед оператором catch в нашем коде. И если это нормальное поведение, зачем вообще регистрировать его. И зачем тогда регистрировать это как ошибку и исключение недопустимого аргумента?
3. На мой взгляд, проверяющий ODataHealthyResponseValidator должен учитывать ответы HTTP 204 без содержимого. Поскольку они полностью нормальны в соответствии со спецификациями OData V2. Зачем пытаться анализировать тело ответа, если статус HTTP уже говорит вам, что тела нет
Ответ №1:
Да, ваше замечание верно, что 204 представляет собой правильный ответ и не стоит регистрировать ошибку. Следовательно, команда Cloud SDK настроит уровень входа в журнал, чтобы он был менее тревожным.
С уважением, Tanvi
Комментарии:
1. На основе sap.github.io/cloud-sdk/docs/java /… новая версия 3.36.0 должна была быть выпущена 4 дня назад. Однако он недоступен в maven central. Когда это будет доступно?
2. Произошла небольшая задержка, но версия доступна в maven central с 19 января. github.wdf.sap.corp/cloudsdk/sdk-core/issues /331