|
Фабрика 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) Это к чему ваще?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |