Всем привет!
Итак, вкратце, пишу api на http-сервисах и чтобы мои xml были как-то типизированы, решил описать схему XDTO. Действительно, очень удобная вещь в плане чтения/записи, да и обрабатывать ошибки проще, просто в исключении будет описание, почему xml невалидный. Все было круто, но как оказалось при создании xml ругается, что мы пытаемся строку записать в число, или длина нашей строки больше, вообще все что указали в XDTO все это учитывается, но вот при чтении xml, все разбирается как строка и глубоко побоку какие там типы у нас в XDTO. Собственно в этом и вопрос, как заставить 1С понимать что xml невалидный, то ли XDTO я коряво описал, то ли нужно копать в строну сериализаторов, короче, приветствуется любая помощь или догадки. Спасибо.
Схема<xs:schema xmlns:ns1="http://v8.1c.ru/8.1/data/core" xmlns:tns="http://блаблабла" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://блаблабла" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:import namespace="http://v8.1c.ru/8.1/data/core"/>
<xs:complexType name="client">
<xs:sequence>
<xs:element name="clientID" type="xs:string"/>
<xs:element name="clientName" type="xs:string"/>
<xs:element name="clientType" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="clients">
<xs:sequence>
<xs:element name="client" type="tns:client" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Создаю для теста XML тут будет ругаться если в clientType присвоить "какая-то строка":
Код ИмяФайла = "D:\api\test.xml";
МойXML = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
МойXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML);
МойXML.ЗаписатьОбъявлениеXML();
clientsТип = ФабрикаXDTO.Тип("http://блаблабла", "clients");
clientТип = ФабрикаXDTO.Тип("http://блаблабла", "client");
clients = ФабрикаXDTO.Создать(clientsТип);
Для н = 1 По 10 Цикл
client = ФабрикаXDTO.Создать(clientТип);
client.clientID = "" + Строка(н);
client.clientName = "Контрагент №" + Строка(н);
client.clientType = 1;
clients.client.Добавить(client);
КонецЦикла;
ФабрикаXDTO.ЗаписатьXML(МойXML, clients);
МойXML.Закрыть();
Но когда читатю могу в XML полный бред написать и никакой ошибки не получу, ну всмысле ошибки о типах.
КодструктурныйТип = ФабрикаXDTO.Тип("http://блаблабла", ТипОбъекта);
XML = Новый ЧтениеXML;
XML.УстановитьСтроку(тутТекстXML);
ПолученныйОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(XML, структурныйТип);
Сообщение отредактировал Vofka - 10.07.17, 7:18