|   |   | 
| 
 | Фабрика XDTO. "Вытащить" косячный тэг. | ☑ | ||
|---|---|---|---|---|
| 0
    
        mTema32 18.12.17✎ 16:28 | 
        Добрый день!
 Может тут кто-нить в курсе и подскажет. Есть схема XDTO. Есть кусок кода Попытка нОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(лЧтение, лТип); Исключение ЗаписатьЛог(ОписаниеОшибки()); КонецПопытки; Если в файле содержится неверный тип(как в схеме), ПрочитатьXML справедливо валится в исключение с ошибкой: Значение: 'тест1' не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}integer Это замечательно, но можно ли как-нибудь узнать в каком конкретно месте/свойстве не тот тип прилетел? Имя свойства. Спасибо. | |||
| 1
    
        DmitrO 18.12.17✎ 16:35 | 
        Убери попытку и увидишь что в исключении есть вся информация.
 Надо использовать ИнформацияОбОшибке(), там есть вложенные объекты ошибки. | |||
| 2
    
        mTema32 18.12.17✎ 16:42 | 
        (1) В смысле убрать попытку? Обработка валится с ошибкой. Или я чет не понимаю?     | |||
| 3
    
        Fragster гуру 18.12.17✎ 16:45 | 
        (2) изучи то, что возвращает ИнформацияОбОшибке(), там есть позиция в файле, в которой ошибка.     | |||
| 4
    
        mTema32 18.12.17✎ 16:50 | 
        (1)(3)
 Вот что возвращает ИнформацияОбОшибке() {Обработка.ФормированиеЗаявок.МодульОбъекта(209)}: Ошибка при вызове метода контекста (ПрочитатьXML) нОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(лЧтение, лТип); по причине: Ошибка проверки данных XDTO: Значение: 'тест1' не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}integer Самого имени свойства нет, есть его несоответствующее значение. | |||
| 5
    
        Fragster гуру 18.12.17✎ 16:51 | 
        ИнформацияОбОшибке() внутри созедржит ИнформацияОбОшибке которая содержит ИнформацияОбОшибке которая содаржит ...     | |||
| 6
    
        mTema32 18.12.17✎ 16:56 | 
        (5) Нет там этой инфы. Есть тоже что выше выложил, только в виде структуры.     | |||
| 7
    
        DmitrO 18.12.17✎ 16:58 | 
        А в свойстве Причина что?     | |||
| 8
    
        mTema32 18.12.17✎ 17:03 | 
        (7)Ошибка проверки данных XDTO:
 Значение: 'тест1' не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}integer Остальные поля пустые. | |||
| 9
    
        mTema32 18.12.17✎ 17:06 | 
        Причина, значение ИнформацияОбОшибке. Имя модуля - пусто, ИсходнаяСтрока - пусто, НомерСтроки- 0, Описание - выше писал, Причина - неопределено.     | |||
| 10
    
        Cyberhawk 18.12.17✎ 17:26 | 
        Ты что, первое вхождение "тест1" в файле не можешь найти?     | |||
| 11
    
        mTema32 18.12.17✎ 17:37 | 
        (10) А при чем тут это? В другом файле будет "тест125". В третьем "ололоо". У меня есть свойство, точнее так - мнооого свойств в схеме, которые хотелось бы однозначно с типом определить. И врукопашную не делать проверки, потому что фабрика это сама умеет делать на основании схемы.
 Есть например 20 свойств, все типа int. Прилетит мне файл, где одно из этих свойств с буквами залетело из внешней системы, как я определю в какое конкретно свойство попал не тот тип данных? | |||
| 12
    
        Fragster гуру 18.12.17✎ 17:38 | 
        (11) в подавляющем большинстве случаев загрузить часть информации по последствиям (в т.ч. долговременным) хуже, чем не загрузить ничего     | |||
| 13
    
        mTema32 18.12.17✎ 17:42 | 
        (12) Так я не спорю. Но весьма странно, что метод прочитатьXML() "видя" несоответствие в схеме и файле, не может вернуть имя свойства, а вот значение может.     | |||
| 14
    
        Kuzmich123 18.12.17✎ 17:43 | 
        (0) топикастер, а тебе надо один раз отловить ошибку или автоматизировать это? Если один раз, то выгрузи xsd из фабрикиXDTO, да натяни на xml в какой-нить студии или альтове     | |||
| 15
    
        mTema32 18.12.17✎ 17:45 | 
        (14) Надо автоматизировать.     | |||
| 16
    
        Cyberhawk 18.12.17✎ 18:12 | 
        (11) Ну как при чем - ошибку же нужно устранить     | |||
| 17
    
        DES 18.12.17✎ 20:05 | 
        возьми notepad++ Загрузи плагин XMLTools
 Получишь инструмент работы с XML Мне здорово помогает. Им можно проверить твой XML на соответствие схемы. | |||
| 18
    
        mTema32 19.12.17✎ 12:23 | 
        (16) Не нужно ничего устранять, нужно просто зафиксировать факт косяка и где он произошел. Если первое работает, то второе вот пока не знаю.     | |||
| 19
    
        mTema32 19.12.17✎ 12:24 | 
        (17) Мне нужно это делать:
 а) Программно. б) Максимально быстро, в виду обработки очереди из файлов xml, которые автоматом залетают в сервис. | |||
| 20
    
        Cyberhawk 19.12.17✎ 12:28 | 
        (18) Ну тогда (10) сам бог велел     | |||
| 21
    
        Serginio1 19.12.17✎ 13:18 | ||||
| 22
    
        mTema32 19.12.17✎ 13:48 | 
        (20) Я возможно чет не понимаю, но каким образом (10) поможет?
 (21) Спасибо, посмотрю. Но зачем тогда ОбъектXDTO нужен если все равно приходится сторонними компонентами пользоваться? | |||
| 23
    
        mTema32 19.12.17✎ 13:49 | 
        +(22) (21) Совсем забыл. У нас сервер на линуксе и соответствующая обработка, так что этот вариант не подойдет.     | |||
| 24
    
        Cyberhawk 19.12.17✎ 14:29 | 
        (22) Зная значение, на котором спотыкается платформенный парсер, ты без труда найдешь и имя свойства / атрибута, в котором это значение сидит     | |||
| 25
    
        Serginio1 19.12.17✎ 14:59 | 
        (23) Ну можно и на линуксе через ВК.
 Я пока не делал, под линукс, но там суть та же http://catalog.mista.ru/public/544232/ | |||
| 26
    
        Serginio1 19.12.17✎ 15:00 | 
        Проще конечно сделать отдельный сервис     | |||
| 27
    
        mTema32 19.12.17✎ 15:13 | 
        (24) Так я не знаю это значение.     | |||
| 28
    
        Cyberhawk 19.12.17✎ 16:21 | 
        (27) Оно указано в тексте ошибки как бы     | |||
| 29
    
        mTema32 19.12.17✎ 17:44 | 
        (28) Указано значение(!) поля. Оно может быть любой строкой.     | |||
| 30
    
        Cyberhawk 19.12.17✎ 18:30 | 
        (29) Лол?     | |||
| 31
    
        mTema32 19.12.17✎ 19:10 | 
        (30) Я понял о чем речь. Туплю чет, на старость лет.
 Но это даст только первый косячный тэг, в случаях два и более в текст ошибки все равно попадает только первый. Ладно, спасибо. Все же этот вариант лучше чем ничего. | |||
| 32
    
        France 19.12.17✎ 23:38 | 
        я бы сопкаст установил, и оттуда тянул бы.. и там ошибки легче ловить..     | |||
| 33
    
        jedbez 20.12.17✎ 01:15 | 
        Если используете фабрикуXDTO, то в файле XML должна быть ссылка на пространство имен.
 Пример: <PERS> <ID_PAC>102</ID_PAC> <FAM>Фамилия</FAM> <IM>Имя</IM> <OT>От</OT> </PERS> Надо заменить заголовок: ТекСтрока = СтрЗаменить(ТекСтрока,"<PERS>","<PERS xmlns=""uri:TFOMS_PK"" >") Иначе Фабрика чаще всего будит крашиться с ошибкой неправильных типов в файле. | |||
| 34
    
        mTema32 20.12.17✎ 09:33 | 
        (32) А можно по-подробнее? Что такое сопкаст и как его едят?
 (33) С пространством имен все в порядке, заменяю. | |||
| 35
    
        George Wheels 20.12.17✎ 10:03 | 
        Фабрика.Пакеты.Получить(ПространствоИмен).КорневыеСвойства...     | |||
| 36
    
        mTema32 20.12.17✎ 10:30 | 
        (35) Это к чему ваще?     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |