|
Передача незаполненных параметров в сторонний веб-сервис | ☑ | ||
---|---|---|---|---|
0
masha_x
21.09.22
✎
12:55
|
Добрый день, помогите, пожалуйста, разобраться.
Есть задача настроить интеграцию через сторонний веб-сервис. В нем есть два похожих метода. В обоих есть необязательные параметры. В первом методе в wsdl указано: <xs:complexType name="getPurchasesByParams"> <xs:sequence> <xs:element name="dateOperDay" type="xs:dateTime"/> <xs:element minOccurs="0" name="shopNumber" nillable="true" type="xs:long"/> <xs:element minOccurs="0" name="cashNumber" nillable="true" type="xs:long"/> <xs:element minOccurs="0" name="shiftNumber" nillable="true" type="xs:long"/> <xs:element minOccurs="0" name="purchaseNumber" nillable="true" type="xs:long"/> </xs:sequence> Во втором: <xs:complexType name="getFullPurchasesByParams"> <xs:sequence> <xs:element name="dateOperDay" type="xs:dateTime"/> <xs:element minOccurs="0" name="shopNumber" type="xs:long"/> <xs:element minOccurs="0" name="cashNumber" type="xs:long"/> <xs:element minOccurs="0" name="shiftNumber" type="xs:long"/> <xs:element minOccurs="0" name="purchaseNumber" type="xs:long"/> </xs:sequence> Если я вызываю первый метод только с одним обязательным параметром dateOperDay, а необязательные параметры оставляю незаполненными: Прокси.getPurchasesByParams(Параметр.dateOperDay,,,,) то он отрабатывает корректно. Если аналогичным образом вызываю второй метод: Прокси.getFullPurchasesByParams(Параметр.dateOperDay,,,,) то он отрабатывает с ошибкой Ошибка при вызове метода контекста (getFullPurchasesByParams): При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {http://plugins.operday.ERPIntegration.crystals.ru/}:FiscalInfoExportService:getFullPurchasesByParams(): При вызове веб-сервиса произошла ошибка. Ошибка SOAP сервера: Unmarshalling Error: For input string: "" Код ошибки: Client Не удалось отправить данные на сервер. Если же вызываю только с обязательным параметром, а необязательные не указываю вообще: Прокси.getPurchasesByParams(Параметр.dateOperDay) и Прокси.getFullPurchasesByParams(Параметр.dateOperDay) то получаю ошибку Недостаточно фактических параметров. Насколько я понимаю, все дело в том, что для второго метода для необязательных параметров в wsdl не указано nillable="true". Хотя вроде бы minOccurs="0" также делает элемент необязательным... Но при этом, когда я посылаю запрос через SoapUI и указываю только обязательный параметр: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:plug="http://plugins.operday.ERPIntegration.crystals.ru/"> <soapenv:Header/> <soapenv:Body> <plug:getFullPurchasesByParams> <dateOperDay>2022-09-14</dateOperDay> </plug:getFullPurchasesByParams> </soapenv:Body> </soapenv:Envelope> то он отрабатывает и возвращает нужные данные. Т.е.как бы параметры-то все же необязательны и их можно не указывать... Помогите, пожалуйста, совсем запуталась уже |
|||
1
ejikbeznojek
21.09.22
✎
17:04
|
nillable="true" же только в 1м сервисе есть.
А во 2м нет. |
|||
2
ejikbeznojek
21.09.22
✎
18:59
|
Недочитал немного (0). Я так понял это фича именно 1С.
Судя по тому что пишут в 0 вот тут. v8: soap nillable="true" или minOccurs="0"; |
|||
3
masha_x
22.09.22
✎
08:47
|
Спасибо за ответ. Стало немного яснее ))
А что с этим можно сделать? В веб-сервисах сильно плаваю еще. Если это схема стороннего веб-сервиса, я ее менять не могу, правильно же? Можно как-то обойти это? Потому как нужно использовать именно второй сервис и именно с незаполненными параметрами |
|||
4
ejikbeznojek
22.09.22
✎
18:22
|
Может пустыми строками заполнить?
|
|||
5
masha_x
23.09.22
✎
08:12
|
Нет, там числовые значения. И я так понимаю, именно незаполненные нужны. Если ставлю 0, то возвращает пустой результат, если "", то ошибка
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |