Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

WEB - сервис стороннего приложения. В тупике. Ошибка при вызове метода.

WEB - сервис стороннего приложения. В тупике. Ошибка при вызове метода.
Я
   new_hope
 
09.04.20 - 18:55
Имею работающий Веб сервис. Все работает, данные получаю. Вернее получал до сегодняшнего дня.
Делал запросы - получал данные и все было хорошо.
Данные, которые я получал были в таблице, поля которой были исключительно примитивных типов (Строки, числа)

Появился на ресурсе новый метод, мне его нужно использовать и получать данные, но в таблице (ответе) появился тип (не примитивный), как я понимаю, ссылка на другую таблицу (или строку другой таблицы с данными).
И все. При запросе получаю ошибку:
http://i.piccy.info/i9/3ce5f37aa06c1bdd4178664e75d5eca2/1586446965/16763/1372020/Oshybka.png

Код:
http://i.piccy.info/i9/dfa68d23bc7a7c0dc3adc2235febe528/1586446560/24219/1372020/Kod.png

ВС_Ссылка
http://i.piccy.info/i9/8c66be63a64ad07501d02f86616524c9/1586447616/8452/1372020/WS_Link.png

Описание типов?:
http://i.piccy.info/i9/18d60f474d77935ea16a67a37dccaa3a/1586447699/14998/1372020/OpysanyeTypov.png

и сама "подчиненная" таблица:
http://i.piccy.info/i9/b5410fa5ecf873d50d5ba1ecd04ce915/1586447763/7558/1372020/Opysanye_tablytsy_etoi_ssylky.png

Постарался как смог описать свою проблему. Не пойму, как получить в 1С данные.
Например - программой SoapUI я получаю данные.
   new_hope
 
1 - 09.04.20 - 19:06
То-есть оно пишет ошибку, что не может типа проверить это "дополнительное" свойство (то-есть это поле, которое не примитивное а является явно другой таблицей...) Как это все увязать?
Хотябы пример какойто похожий?
   acht
 
2 - 09.04.20 - 19:08
вссылку обнови
   new_hope
 
3 - 09.04.20 - 19:09
(2) та это сделано в самую первую очередь... Или ее нужно динамически обновлять при каждом запросе? (я ее в конфигураторе тока обновил)
   NorthWind
 
4 - 09.04.20 - 19:24
Может, поднять фиддлер и посмотреть что реально приходит, а потом сравнить это со схемой? Если метод свежевнедренный, то не исключены и ошибки разработчиков сервиса...
   new_hope
 
5 - 09.04.20 - 19:25
(4) А что такое Фиддлер? Можно чуть поподробнее, по этому моменту?
   new_hope
 
6 - 09.04.20 - 19:26
(4) Понял... прокси отладочный... ну это также для меня новое поле знаний
   NorthWind
 
7 - 09.04.20 - 19:27
(5) это такая штука, которая перехватывает веб-трафик (wininet.dll) и показывает его. Веб-отладчик. Можно смотреть что вы отправляете на сервис и получаете с него
   Cyberhawk
 
8 - 09.04.20 - 19:34
Так у тебя в ответе походу приходит не то содержимое, что ожидается
   new_hope
 
9 - 09.04.20 - 19:41
(8) нууу... наверное да... Но вот программой SoapUI которой меня ткнули носом - данные получает - она отрабатывает и какие то данные приходят... типа "на все работает"

А в 1С? С точки зрения кода и запроса все ок? рядом методы работают - но там тока примитивные типы. В методах, где есть кроме примитивных типов данных - вот то, что я указал - все. капут!
   Cyberhawk
 
10 - 09.04.20 - 19:42
Если дашь доступ к веб-сервису, то смогу посмотреть
   Garykom
 
11 - 09.04.20 - 19:45
(0) >Появился на ресурсе новый метод
WSDL-схему перезагрузи и да могут быть приколы
   new_hope
 
12 - 09.04.20 - 20:01
(11) Уже. В конфигураторе
   new_hope
 
13 - 09.04.20 - 20:02
Вот в сторонней программе запрос отрабатывает:

http://piccy.info/view3/13748209/7d6ad3d5935fb9963e5e7f129d19d63f/
   new_hope
 
14 - 09.04.20 - 20:02
Короче - надо торбить разработчика, как я понял
   NorthWind
 
15 - 09.04.20 - 20:10
(13) вы обратили внимание, что у вас в теге ACTS элементов меньше чем указано в схеме? D_ISSUE и ORDERS нет. Они ненароком не обязательные? По остальным нормально все - т.е. данные примерно соответствуют типам и фасетам?
   NorthWind
 
16 - 09.04.20 - 20:13
дело не в том отрабатывает запрос или нет. Дело в том что вы XDTO-пакет для разбора ответа генерируете по схеме, но во-первых, в схеме не исключены мелкие косяки, во-вторых, составные элементы в SOAP могут представляться немножко по-разному и из-за этого разные клиентские библиотеки иногда лажаются. 1Cный XDTO не исключение.
   new_hope
 
17 - 09.04.20 - 20:17
(15)  Понял... а и вправду - нету в ответе "D_ISSUE и ORDERS".... Както странно
   NorthWind
 
18 - 09.04.20 - 20:23
(17) на самом деле если они необязательные, то это влиять не должно. Надо проверить.
   new_hope
 
19 - 09.04.20 - 20:26
(18) А как понять, обязательные они или нет? Это можно в описании wdsl увидеть?
   new_hope
 
20 - 09.04.20 - 20:30
   new_hope
 
21 - 09.04.20 - 20:35
А.... и может это.... версия 1С 8.3.10
   NorthWind
 
22 - 09.04.20 - 20:53
(20) минимальное количество элементов D_ISSUE=1. Т.е. как минимум один должен быть. А у вас ни одного.
   NorthWind
 
23 - 09.04.20 - 20:54
+ поменяйте на ноль и посмотрите что и как будет происходить
   NorthWind
 
24 - 09.04.20 - 20:56
это я и имел в виду под "мелкими косяками". Элем описан как обязательный, но в продакшене ответ идет без него.
   Cyberhawk
 
25 - 10.04.20 - 13:37
(20) Минимальное кол-во = 1, обязательное
   new_hope
 
26 - 10.04.20 - 14:14
Еще вопрос - ответ от сервера - это данные в виде XML ?
   NorthWind
 
27 - 10.04.20 - 14:16
(26) да, конечно. SOAP так и работает - запрос в виде XML, ответ тоже в виде XML.
   new_hope
 
28 - 10.04.20 - 14:17
И и этот "ответ" (XML) 1С-ка преобразует в свой собственный объект XDTO.... Верно я понимаю?
   NorthWind
 
29 - 10.04.20 - 14:19
(28) нет. Как я понимаю, сервер отправляет ответ, XDTО-пакет его проверяет на соответствие схеме (где у вас и происходит ошибка) и затем разбирает, разбрасывая данные по полям. После чего к ним можно обращаться из программы на 1С.
   NorthWind
 
30 - 10.04.20 - 14:20
* сорри, неверно вашу реплику прочитал. Все верно.
 
 Рекламное место пустует
   new_hope
 
31 - 10.04.20 - 14:23
(25) Не меняя ничего они мне смоделировали набор данных (за один определенный деть) со всеми полями, которые есть и указаны. Всеравно ошибка.
   new_hope
 
32 - 10.04.20 - 14:30
У меня поле "ORDERS" составного (не примитивного типа)... для таких полей нет никаких в 1С определенных специальных методов работы или получения данных?

Короче... уже всех задрал чувствую :-) пардон.
   NorthWind
 
33 - 10.04.20 - 14:49
(31) навскидку сказать сложно, нужно проводить эксперименты. Как вариант, можно "сыграть" наоборот - заполнить поля в XDTO-пакете и записать XML, и сравнить получившееся с тем что возвращается сервером. Тут и вылезет косяк.
   new_hope
 
34 - 10.04.20 - 16:56
Маленький вопрос.. Это не может касаться моего Варианта (вычитал на просторах интернета, в том числе и на ИТС):

Типы делятся на простые (simple) и составные (complex). Составные типы могут иметь несколько моделей содержимого, но XDTO поддерживает только простые последовательности свойств - так называемые sequence. (Для контента сложных типов следует использовать только модель sequence - ИТС)

Может быть проблема какраз в этом?
   NorthWind
 
35 - 10.04.20 - 18:44
(34) да, вполне может быть в этом.
   Сияющий в темноте
 
36 - 10.04.20 - 23:20
можно через httpзапрос отправить запрос и разобрать ответ вручную,но это придется пеоеписывать при каждом изменении сервиса.
   Сияющий в темноте
 
37 - 10.04.20 - 23:21
и можно спросить,если на той стороне сервис писали кодом,то лучше и на этой работать кодом,тогда странных ошибок будет меньше.
   H A D G E H O G s
 
38 - 10.04.20 - 23:33
Тащить WSDL схему на каждый чих - такое себе.
Закешируйте его в tmp файл при первом обращении программы и обновляй при перезапуске 1С.
   NorthWind
 
39 - 11.04.20 - 08:17
(36) вот только пересмотрел я ответ (13) и не увидел там никакой зауми... Обычные вложенные элементы, чего XDTO не может там вычитать - на первый взгляд непонятно. Я бы все-таки внимательно посмотрел на пакет и элементы. Где-то что-то не соответствует скорее всего.
   new_hope
 
40 - 13.04.20 - 14:53
(37) Кодом - это как...на этой стороне? Можно "работать" еще както совсем другим кодом?
На той стороне НЕ 1С
   NorthWind
 
41 - 13.04.20 - 19:31
(40) это понятно что не 1С. Серьезные нагруженные системы такого плана пишутся на Java обычно или еще на чем-то подобном.
Имеется в виду следующее: вмешаться в механизм разбора XDTO-пакета нельзя, он - вещь в себе. У него, например, нет процедур обработки событий, которые бы позволили подправить входящие узлы перед обработкой или сделать еще что-то подобное. Поэтому если возможности по подправке XSD/WSDL исчерпаны, то остается только разбирать ответы руками, что адски неприятно для серьезных сервисов, где таких пакетов может быть много.
   NorthWind
 
42 - 13.04.20 - 19:38
если вы уверены что у вас все хорошо со схемой - попробуйте платформу посвежее. Может, вам повезет и это ошибка платформы, которую со временем устранили.
   Serginio1
 
43 - 14.04.20 - 13:48
Если вдруг не получится можно воспользоваться Использование классов .Net в 1С для новичков В свое время для таких случаев и писал
Не всегда сторонние схемы  соответствует 1С Wsdl. Прелесть C# в том, что всегда можно для типа реализовать IXmlSerializable и ты сам будешь контролировать сериализацию.
Ну или Скачать Wsdl и заменить тип на Any импортировать и уже  самому программно разбирать объект XDTO
   new_hope
 
44 - 14.04.20 - 18:03
(42) Пробовал и на 16-й версии - все таже ошибка, к сожалению.
Как я понимаю, со стороны 1С уже ниначто не повлиять. осталось ждать совместимости со стороны разработчика сервиса. :-(
   NorthWind
 
45 - 14.04.20 - 18:32
(44) не видя xsd и не имея хотя бы 1-2 респонсов в виде текстовых файлов, трудно родить каких-либо идей кроме тех что уже были озвучены. Выложите - ну, можно будет попробовать выбрать время посмотреть.
   milan
 
46 - 14.04.20 - 20:34
Плюнул в свое время , запрашиваю и разбираю ответы ручками.
   new_hope
 
47 - 15.04.20 - 17:40
(46) можно пример как Вы это делаете?
   Serginio1
 
48 - 16.04.20 - 14:05
   new_hope
 
49 - 17.04.20 - 12:22
(46)
Получил информацию.

Выкладываю XSD схему:
https://mega.nz/file/0N1V1RqC#fKsFrc_cZDmsOWAUa2Nao_Wuc7yRHwzc8Em9u5BoIc8

И ответ сервера по запросу (xml файл):
https://mega.nz/file/AN03TTbS#sP_fKiVQhO-OGhJrbqBbmKEhhnJc9_ZUtndsvfuseXM
   NorthWind
 
50 - 17.04.20 - 16:10
Уже вижу косяк. В XSD у вас 
  <xs:complexType name="OcInsOrderCompensationResponceDto">
    <xs:sequence>
      <!-- Номер приказа на выплату -->
      <xs:element name="NUM_PO" type="xs:string" minOccurs="0" />

а в респонсе
               <ns2:ORDERS>
                  <ns2:NUM>003/037/000012/20/1/1</ns2:NUM>

т.е. номера обозваны по-разному. Если подправить в схеме NUM_PO на NUM и удалить из XML-файла SOAPовские обертки:

==Response_mista1.xml==

<?xml version="1.0" encoding="UTF-8"?>
         <ns2:insCompensationCurrentInfo xmlns:ns2="http://othersoft.com/oc/schemas">;
            <ns2:UID>sc105960</ns2:UID>
            <ns2:D_CLAIM>2020-03-26</ns2:D_CLAIM>
            <ns2:EL_RISK>osago-damage</ns2:EL_RISK>
            <ns2:DECL>47800.0</ns2:DECL>
            <ns2:ACTS>
               <ns2:D_ISSUE>2020-03-27T00:00:00+02:00</ns2:D_ISSUE>
               <ns2:OBJ_UID>c2021330</ns2:OBJ_UID>
               <ns2:C_INSUR>7663</ns2:C_INSUR>
               <ns2:NUM>003/037/000012/20/1</ns2:NUM>
               <ns2:SUM_ACT>47800.0</ns2:SUM_ACT>
               <ns2:ORDERS>
                  <ns2:NUM>003/037/000012/20/1/1</ns2:NUM>
                  <ns2:SUM_RECEIPT>47800.0</ns2:SUM_RECEIPT>
                  <ns2:CUSTOMER_S>Админченко Админ Админович</ns2:CUSTOMER_S>
                  <ns2:OKPO>2883334290</ns2:OKPO>
               </ns2:ORDERS>
            </ns2:ACTS>
         </ns2:insCompensationCurrentInfo>

тогда следующий код

    чОтвет = Новый ЧтениеXML ();
    чОтвет.ОткрытьФайл("D:\Response_mista1.xml");
    
    Файл = ФабрикаXDTO.ПрочитатьXML(чОтвет, ФабрикаXDTO.Создать("http://othersoft.com/oc/schemas";, "OcInsCompensationCurrentInfo").Тип());

грузит ваш файлик.
   new_hope
 
51 - 17.04.20 - 16:56
(50)ОГО - спасибо! Большое!

А по поводу "Соаповские" обертки - разработчики сервиса с ними тоже должны что-то подправить?
   new_hope
 
52 - 17.04.20 - 17:04
Кстати - в  WDSL файле также "NUM_PO" ::-(
   new_hope
 
53 - 17.04.20 - 18:06
Все это от собственного незнания.... В Программе SoapUI есть возможность автоматически проверять "Правильность" соответствия данных -> схеме этих данных.

Немножко изучив функционал и нажав кнопочку "Validate" в окне ответа (где результат с данными) получил следующее - четко написано, что ожидается элемент "NUM_PO" (В ответе "NUM")

line 17: Expected elements 'NUM_PO@http://othersoft.com/oc/schemas SUM_RECEIPT@http://othersoft.com/oc/schemas CUSTOMER_S@http://othersoft.com/oc/schemas OKPO@http://othersoft.com/oc/schemas' instead of 'NUM@http://othersoft.com/oc/schemas' here in element ORDERS@http://othersoft.com/oc/schemas
   NorthWind
 
54 - 17.04.20 - 18:34
(51) > А по поводу "Соаповские" обертки - разработчики сервиса с ними тоже должны что-то подправить?
Думаю, что нет. Типы Envelope, Header, Body - служебные, они обрабатываются библиотекой SOAP-клиента, в схемах не указываются.
А тип верхнего уровня OcConsolidatedCaseInfoListResponse, по-видимому, описан в WSDL.
Все оставшееся нормально обрабатывается вашей схемой, если ее подправить.
Если у вас есть контакт с разрабами - укажите им на ошибки. А если нет - исправьте сами ручками схему под данные да и пользуйтесь, пока не исправят.
(53) так я ж вам еще неделю назад говорил - проверяйте схему и сравнивайте ее с ответом. У вас там не сотни атрибутов - с такими размерами схем безо всякого SOAPUI делается глазками за несколько минут.
   NorthWind
 
55 - 17.04.20 - 18:40
как вариант - можно вообще в схеме указать оба атрибута, как необязательные:
<xs:element name="NUM" type="xs:string" minOccurs="0" />
<xs:element name="NUM_PO" type="xs:string" minOccurs="0" />
и потом обработать программно встречаемость обоих из них. Т.е. по умолчанию берем NUM, а если его вдруг нет, то проверяем NUM_PO.
В этом случае у вас программа не упадет, когда они исправят атрибут и ответ внезапно пойдет с NUM_PO вместо NUM.
   new_hope
 
56 - 21.04.20 - 09:58
(54) Приветствую! Супер . Спасибо.. вроде как почти понял темперь все необходимые нюансы

Тоесть, мне достаточно отредактировать WDSL файл в соответствии с ответом (данными), которые приходят в ответ от сервера? Это конечно просто, буду его в отредактированом виде использовать локально с диска.

Но вот саму схему (xsd файл) мне его прислали,  обственно на сам файл и его расположение как повлиять или достаточно WDSL?
   new_hope
 
57 - 21.04.20 - 10:39
(54) У меня все получилось! Спасибо всем огромное! Банальная невнимательность разработчика сервиса!
   NorthWind
 
58 - 21.04.20 - 13:11
(56) когда вы создаете WS-ссылку в конфигурации, вы импортируете WSDL. Также вы импортируете XSD, когда создаете XDTO-пакеты. Раз вы проимпортировали - вы фиксируете то состояние, в котором оно пребывает на момент, например когда вы скачали его у разработчика и подправили под свои нужды. Если у разработчика сервиса что-то поменяется, то придется еще раз это все проделать и еще раз передать вашу конфу пользователям - обновить там или еще как-то.

Как я понимаю, в норме разработчик сервиса должен обеспечить такие XSD и WSDL, которые позволяют все нормально импортировать куда угодно - в дельфю, в 1С, в С# и т.д. Но на практике все не так просто - есть немного различающиеся механизмы представления сложных объектов в XML, разные библиотеки web-клиентов могут по-разному это все разбирать, что-то они могут уметь, а что-то не уметь (привет, XDTO), в некоторых языках может быть даже конфликт атрибутов с зарезервированными словами. Кроме того, разработчики сервисов, как в вашем случае, могут косячить, это не редкость, и крайне долго и неохотно исправлять свои косяки. Короче, править иногда приходится. Это практически норма.
   new_hope
 
59 - 21.04.20 - 14:09
(58) Да, по поводу XSD файла... я его, фактически, только посмотрел! А внес изменения только в файл wdsl (согласно с XML фалом данных, которые отвечает сервер, что-бы все "совпадало") поместил файл локально и импортировал его в конфигурацию. И все сразу заработало без ошибок.

Это я к чему - к тому, что я так и не ПОНЯЛ, какую функцию несет тот XSD файл для 1C (ведь в нем осталосьвсе поля без изменений на стороне сервиса), оказалось, что достаточно только правильного WDSL файла и все.
   NorthWind
 
60 - 21.04.20 - 14:15
(59) в wsdl-файле может быть вот так:

   <wsdl:types>

      <xs:schema>
         <xs:import namespace="http://api.vetrf.ru/schema/cdm/application/ws-definitions";
                    schemaLocation="application_ws_definitions_v2.0.xsd"/>
         <xs:import namespace="http://api.vetrf.ru/schema/cdm/base/ws-definitions";
                    schemaLocation="base_ws_definitions_v2.0.xsd"/>
      </xs:schema>
   </wsdl:types>

но вообще этот вопрос - скорее к разработчику сервиса.
 
 Рекламное место пустует


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.