| 
    
            
         
         | 
    
    
  | 
Отправка XML в web-сервис используя SoapUI | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Necessitudo    
     10.09.15 
            ✎
    15:42 
 | 
         
        Всем привет. Сделал веб-сервис, сделал xdto-пакет:
 
        <xs:schema xmlns:tns="http://www.tehnosila.ru/PaymentOrder" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.tehnosila.ru/PaymentOrder" attributeFormDefault="unqualified" elementFormDefault="qualified"> <xs:complexType name="HeaderData"> <xs:sequence> <xs:element name="SHOP" type="xs:string" nillable="true"/> </xs:sequence> </xs:complexType> </xs:schema> Вызываю веб-сервис из SoapUI, передаю туда такой кусочек: <?xml version="1.0"?> <SHOP = 3666> </SHOP> Получаю ошибку: <faultstring>Неизвестная ошибка. Ошибка разбора XML: - [6,9] Фатальная ошибка: XML declaration allowed only at the start of the document по причине: Ошибка разбора XML: - [6,9] Фатальная ошибка: XML declaration allowed only at the start of the document</faultstring> А что не так? Какой тогда текст нужно передавать в веб-сервис?  | 
|||
| 
    1
    
        gigi789    
     10.09.15 
            ✎
    15:44 
 | 
         
        (0) <SHOP >3666
 
        </SHOP>  | 
|||
| 
    2
    
        Necessitudo    
     10.09.15 
            ✎
    15:46 
 | 
         
        (1) Нет     
         | 
|||
| 
    3
    
        gigi789    
     10.09.15 
            ✎
    15:48 
 | 
         
        (2) нажми alt- v     
         | 
|||
| 
    4
    
        Necessitudo    
     10.09.15 
            ✎
    15:51 
 | 
         
        (3) А, первая строчка была лишней:) 
 
        <soap:Text xml:lang="ru_RU">Неизвестная ошибка. Ошибка преобразования данных XDTO: Чтение объекта типа: {http://www.tehnosila.ru/PaymentOrder}HeaderData - [11,4] Проверка дополнительного свойства: форма: Элемент имя: SHOP по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: {http://www.tehnosila.ru/PaymentOrder}HeaderData - [11,4] Проверка дополнительного свойства: форма: Элемент имя: SHOP по причине: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: {http://www.tehnosila.ru/PaymentOrder}HeaderData</soap:Text>  | 
|||
| 
    5
    
        Serginio1    
     10.09.15 
            ✎
    15:54 
 | 
         
        А почему не проверить прямо из 1С?     
         | 
|||
| 
    6
    
        Necessitudo    
     10.09.15 
            ✎
    15:57 
 | 
         
        (5) Потому что думаю что моя ошибка очень очевидна и она почти наверняка в  моей схеме.     
         | 
|||
| 
    7
    
        Serginio1    
     10.09.15 
            ✎
    16:02 
 | 
         
        ОпределениеТ=Новый WSОпределения(ПутьК_wsdl);
 
        WSСервис=ОпределениеТ.Сервисы[0]; прокси=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя); Фабрика=Прокси.ФабрикаXdto(); Тип=Фабрика.Тип("http://www.tehnosila.ru/PaymentOrder","HeaderData"); Значение=Фабрика.Создать(тип); Значение.Shop="3666"; Прокси.Метод(Значение);  | 
|||
| 
    8
    
        palsergeich    
     10.09.15 
            ✎
    16:07 
 | 
         
        ММММ а где корневой элемент XML?     
         | 
|||
| 
    9
    
        Necessitudo    
     10.09.15 
            ✎
    16:09 
 | 
         
        (7) Я сделал фабрикуxdto в 1С, получил на выходе такую строку:
 
        <HeaderData xmlns="http://www.tehnosila.ru/PaymentOrder" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SHOP>1111</SHOP> </HeaderData> Перекинул ее в SoapUI и получил ошибку: <soap:Text xml:lang="ru_RU">Неизвестная ошибка. Ошибка преобразования данных XDTO: Чтение объекта типа: {http://www.tehnosila.ru/PaymentOrder}HeaderData - [12,4] Проверка дополнительного свойства: форма: Элемент имя: {http://www.tehnosila.ru/PaymentOrder}HeaderData по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: {http://www.tehnosila.ru/PaymentOrder}HeaderData - [12,4] Проверка дополнительного свойства: форма: Элемент имя: {http://www.tehnosila.ru/PaymentOrder}HeaderData по причине: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: {http://www.tehnosila.ru/PaymentOrder}HeaderData</soap:Text>  | 
|||
| 
    10
    
        palsergeich    
     10.09.15 
            ✎
    16:11 
 | 
         
        targetNamespace="http://www.tehnosila.ru/PaymentOrder"; 
 
        пространство имен описано в фабрике? И странно что формируемый элемент не содержит корневого узла  | 
|||
| 
    11
    
        palsergeich    
     10.09.15 
            ✎
    16:11 
 | 
         
        формируемы XML точнее     
         | 
|||
| 
    12
    
        Necessitudo    
     10.09.15 
            ✎
    16:15 
 | 
         
        (7)
 
        {Форма.Форма.Форма(16)}: Ошибка при вызове метода контекста (RegisterPayment) Прокси.RegisterPayment(Обр); по причине: Ошибка вызова операции сервиса: {http://www.tehnosila.ru/PaymentOrder}:PaymentOrder:RegisterPayment() по причине: Неизвестная ошибка. Несоответствие типов XDTO: Тип '{http://www.tehnosila.ru/PaymentOrder}HeaderData' не найден Тип принадлежит пакету, входящему в состав другой фабрики типов XDTO по причине: Несоответствие типов XDTO: Тип '{http://www.tehnosila.ru/PaymentOrder}HeaderData' не найден Тип принадлежит пакету, входящему в состав другой фабрики типов XDTO  | 
|||
| 
    13
    
        palsergeich    
     10.09.15 
            ✎
    16:18 
 | 
         
        Я просто оставлю это здесь. http://catalog.mista.ru/public/167459/
 
        Там 3 статьи.  | 
|||
| 
    14
    
        Necessitudo    
     10.09.15 
            ✎
    16:19 
 | 
         
        (13) Читал.     
         | 
|||
| 
    15
    
        palsergeich    
     10.09.15 
            ✎
    16:22 
 | 
||||
| 
    16
    
        Serginio1    
     10.09.15 
            ✎
    16:22 
 | 
         
        Так ты фабрику прокси используешь?
 
        Такое бывает если ты используешь вместо Фабрика=Прокси.ФабрикаXdto(); Используешь Фабрика=ФабрикаXdto();  | 
|||
| 
    17
    
        Serginio1    
     10.09.15 
            ✎
    16:23 
 | 
         
        (16) Ты использовал полностью код из 7?     
         | 
|||
| 
    18
    
        palsergeich    
     10.09.15 
            ✎
    16:24 
 | 
         
        http://catalog.mista.ru/public/193460/ Вот еще хорошо описано     
         | 
|||
| 
    19
    
        Necessitudo    
     10.09.15 
            ✎
    16:27 
 | 
         
        (17) Ура, из 1С все работает!
 
        Но если подставить полученную xml в SoapUI, получается ошибка(  | 
|||
| 
    20
    
        palsergeich    
     10.09.15 
            ✎
    16:39 
 | 
         
        <?xml version="1.0"?>
 
        <SHOP = 3666> </SHOP> Данный XML НЕ ВАЛИДЕН, нет корневого узла  | 
|||
| 
    21
    
        palsergeich    
     10.09.15 
            ✎
    16:41 
 | 
         
        И вы значение присваиваете не атрибуту, а элементу, что тоже является неправильным     
         | 
|||
| 
    22
    
        Necessitudo    
     10.09.15 
            ✎
    16:43 
 | 
         
        (21) Так ругань идет не на валидность, а на ошибку преобразования данных XDTO. Да и если через 1С сделать XDTO и вызвать этот веб-сервис, то все работает.     
         | 
|||
| 
    23
    
        palsergeich    
     10.09.15 
            ✎
    16:46 
 | 
         
        Теоретически вы можете скормить что угодно, но SOAP UI работает с валидными или хотя бы правильно сформированными XML. Ваш XML не валиден изза отсутствия корневого узла и не правильно сформирован изза того что присвоение значения идет не атрибуту, а элементу. так понятно?     
         | 
|||
| 
    24
    
        Necessitudo    
     10.09.15 
            ✎
    16:49 
 | 
         
        (23) Конечно.
 
        Поменял SHOP на атрибут. <xs:schema xmlns:tns="http://www.tehnosila.ru/PaymentOrder" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.tehnosila.ru/PaymentOrder" attributeFormDefault="unqualified" elementFormDefault="qualified"> <xs:complexType name="HeaderData"> <xs:attribute name="SHOP" type="xs:string" use="required"/> </xs:complexType> </xs:schema> Вот такую XML 1С выдает: <HeaderData xmlns="http://www.tehnosila.ru/PaymentOrder" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SHOP="1111"/> Вот такую XML в SoapUI вставить? <?xml version="1.0"?> <HeaderData xmlns="http://www.tehnosila.ru/PaymentOrder" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SHOP="1111"/>  | 
|||
| 
    25
    
        palsergeich    
     10.09.15 
            ✎
    16:50 
 | 
         
        И фабрика ждет валидный XML     
         | 
|||
| 
    26
    
        palsergeich    
     10.09.15 
            ✎
    16:56 
 | 
         
        Жесть.
 
        <HeaderData xmlns="http://www.tehnosila.ru/PaymentOrder"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Root> <SHOP ShopNumber = "1111"><SHOP> </Root> Вот валидный XML, а то что у Вас, это , у меня даже слов нет  | 
|||
| 
    27
    
        palsergeich    
     10.09.15 
            ✎
    16:57 
 | 
         
        <?xml version="1.0"?> 
 
        <HeaderData xmlns="http://www.tehnosila.ru/PaymentOrder";; xmlns:xs="http://www.w3.org/2001/XMLSchema";; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">; <Root> <SHOP ShopNumber = "1111"></SHOP> </Root> Вот так, точнее  | 
|||
| 
    28
    
        Necessitudo    
     10.09.15 
            ✎
    16:59 
 | 
         
        (27) 
 
        <faultstring>Неизвестная ошибка. Ошибка разбора XML: - [6,8] Фатальная ошибка: XML declaration allowed only at the start of the document по причине: Ошибка разбора XML: - [6,8] Фатальная ошибка: XML declaration allowed only at the start of the document</faultstring> <detail/>  | 
|||
| 
    29
    
        Necessitudo    
     10.09.15 
            ✎
    17:00 
 | 
         
        А если без 
 
        <?xml version="1.0"?> , то такое <faultstring>Неизвестная ошибка. Ошибка разбора XML: - [6,18] Фатальная ошибка: error parsing attribute name по причине: Ошибка разбора XML: - [6,18] Фатальная ошибка: error parsing attribute name</faultstring> <detail/>  | 
|||
| 
    30
    
        palsergeich    
     10.09.15 
            ✎
    17:02 
 | 
         
        <?xml version="1.0"?> 
 
        <Root> <SHOP ShopNumber = "1111"></SHOP> </Root> <?xml version="1.0"?> - описание - Оно обязательно Далее тег Root - Корневой элемент, В вашем случае там идет описание схемы.  | 
|||
| 
    31
    
        palsergeich    
     10.09.15 
            ✎
    17:03 
 | 
         
        http://okitgo.ru/xml/proverka-xml.html Вот простейшее описание XML формата.     
         | 
|||
| 
    32
    
        Necessitudo    
     10.09.15 
            ✎
    17:05 
 | 
         
        (31) Ну господи, я знаю что такое xml. Я подставляю в SoapUI то, что выдает мне 1С. Не нужна там похоже валидная XML, ну вроде понятно же уже.     
         | 
|||
| 
    33
    
        Serginio1    
     10.09.15 
            ✎
    17:15 
 | 
         
        (32) Посмотри Фиддлером что отправляется в том и ином случае     
         | 
|||
| 
    34
    
        Багминот    
     10.09.15 
            ✎
    17:22 
 | 
         
        Ну вы даете! :)
 
        То есть вы суете в соап сервис вместо соап-конверта тупо хмл?  | 
|||
| 
    35
    
        Necessitudo    
     10.09.15 
            ✎
    17:26 
 | 
         
        (34) А чего тут такого?) 1С ж чует XDTO и даже пытается разбирать.     
         | 
|||
| 
    36
    
        Багминот    
     10.09.15 
            ✎
    17:36 
 | 
         
        (35) Ну ты же хочешь не из 1С-а обращаться к сервису? Тут надо хотя бы в принципе представлять что такое SOAP. Можно вики почитать: https://ru.wikipedia.org/wiki/SOAP
 
        Хотя странно... SoapUI сам правильно формирует запросы, надо только данные подставить вместо "?" в сгенеренную XML-ку.  | 
|||
| 
    37
    
        Necessitudo    
     10.09.15 
            ✎
    17:45 
 | 
         
        (36) То есть чисто теоретически возможно в качестве параметра передать XML?     
         | 
|||
| 
    38
    
        Necessitudo    
     10.09.15 
            ✎
    17:46 
 | 
         
        (36) Я сейчас передаю XML как строку, а на выходе общаюсь с ней как с DOM-объектом. Вариант конечно, но не айс)     
         | 
|||
| 
    39
    
        Багминот    
     10.09.15 
            ✎
    17:49 
 | 
         
        (38) А, то есть ты это свою хмл-ку хотя бы внутри соап-конверта передаешь? Тогда надо просто в https://ru.wikipedia.org/wiki/CDATA обернуть.
 
        Но это жуткий изврат, передавать хмл внутри хмл. Не надо так.  | 
|||
| 
    40
    
        Necessitudo    
     10.09.15 
            ✎
    17:55 
 | 
         
        (39) Да, так и делаю. Буду знать что это называется CDATA:)     
         | 
|||
| 
    41
    
        Serginio1    
     10.09.15 
            ✎
    18:49 
 | 
         
        (38) Если создашь XML по схеме то и читать можешь тоже по схеме     
         | 
|||
| 
    42
    
        Necessitudo    
     11.09.15 
            ✎
    16:49 
 | 
         
        Так а все-таки, как через SOAP передавать какие-то структурированные данные?     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |