Ошибка разбора soap сообщения неверная версия сообщения 1с
Есть у меня PL\Sql процедура для передачи переменных на веб сервис и получения ответа.
<!--Zero or more repetitions:-->
<int:AdditionalServices>
<int:AdditionalServicesCode>2</int:AdditionalServicesCode>
<int:AdditionalServicesParametr>15.08.2016 0:00:00;000000007</int:AdditionalServicesParametr>
</int:AdditionalServices>
<int:Cargo>
<int:CargoType>0001</int:CargoType>
<int:CargoDescription>Мобильный телефон Samsung</int:CargoDescription>
</int:Cargo>
<int:CargoParams>
<int:Quantity>1</int:Quantity>
<int:Weight>1</int:Weight>
<int:Volume>0.1</int:Volume>
</int:CargoParams>
<!--Zero or more repetitions:-->
<int:ReservedField>
<int:ReservedFieldName></int:ReservedFieldName>
<int:ReservedFieldValue></int:ReservedFieldValue>
</int:ReservedField>
<int:PAS>333</int:PAS>
<int:ReceiverCompany></int:ReceiverCompany>
<int:SenderCompany></int:SenderCompany>
</int:TTN>
</api2:AddRequest>
</api2:AddTTN>
</soapenv:Body>
</soapenv:Envelope>';
Мои попытки найти ответ в гугле на ошибку "Фатальная ошибка: expected '& gt;'" не увенчались успехом.
Буду благодарен за помощь в решении данной ошибки.
Спасибо за ответ, но как-то не помог он. Ругается то на "[", то на количество аргументов .
А Вы не знаете могу ли я посмотреть, что именно оракл передаёт?
хрустальный шар неуверенно предполагает |
XMLer намекал, что buf нарезается поБАЙТНО, а отправляется ТЕКСТ, что на мультибайте запросто может приводить к покореженным символам.
Но дело даже не в этом.
Вопрос - нафига повторять весть v_soap_request ceil(lengthb(v_soap_request)/2000) раз?
Скачивайте теоретические материалы в PDF и видео-формате. Рекомендуем начинать именно с изучения теории.
Выполняйте практическое задание для закрепления полученных знаний.
Выполните самоконтроль, просмотрев видео-решение преподавателя.
Теоретические материалы
Итак, приступайте к изучению теоретического материала второго модуля курса.
Вопросы
Если у Вас возникли вопросы, Вы можете просто просмотреть комментарии ниже, наверняка Вы найдете ответ.
Обратите внимание, для навигации по комментариям внизу страницы есть ссылки
Если же Вам необходима поддержка, мы с радостью ответим на Ваши вопросы в рамках Мастер-группы «Полного курса по разработке Мобильных приложений на платформе «1С:Предприятие 8» .
Комментарии / обсуждение (873):
Если СтруктураДанныхНеопределено Тогда…
меньше больше (оператор неравенства) здесь не отображаются (((
Если НЕ СтруктураДанных=Неопределено Тогда…
У меня такие ошибки.
1. Набираю в хроме ссылку на веб сервис, но ничего вразумительного не получаю. Абракадабра. А виндовый эксплорер показывает нормально XML.
2. На Samsung Galaxy Note 2 при обновлении конфы пишет про ошибку разбора XML.
Решил проблему убрав из веб сервиса и пакета XDTO кириллицу. Т.е. все наименования объектов конфы сделал латиницей и заработало!
Была ошибка в функции СоздатьОтветКлиенту
Возврат Соответствие вместо Возврат Сериализовать(Соответствие)
Вопрос про серилазиацию/десириализацию XTDO.
Как сериализуется ссылочный тип?
Например, в базе сервере и в базе клиента есть один справочник Номенклатура, реквизиты одинаковые. Достаточно ли в этом случае , что НАЗВАНИЕ справочника Номенклатура будет одинаковым в обоих базах и создавались этот справочник в конфигурациях вручную, а не через копи/паст, чтобы ссылка десериазовалась?
Не понял сразу вопрос. Можно переносить двумя способами. Сериализовать объект и после десериализации выполнить метод записать(). Если имя типа совпадает то либо подхватится элемент с таким УИДом или создастся новый. Дибо переносить структуру с реквизитами и УИДом. Тогда надо у менеджера нужного типа выполнить метод ПолучитьСсылку(УИД) и получать объект потом.
Помогите пожалуйста возникает ошибка при отладке
: Ошибка при вызове метода контекста (ПолучитьСреднее)
Ответ = Соединение.ПолучитьСреднее(Неопределено,Сериализовать(СтруктураДанных));
по причине:
Ошибка вызова операции сервиса: :ФункцииДляРассчета:ПолучитьСреднее()
по причине:
Ошибка SOAP сервера: Неизвестная ошибка. : Значение не является значением объектного типа (КоличествоЭлементовВМассиве)
по причине:
: Значение не является значением объектного типа (КоличествоЭлементовВМассиве)
Попробовал воспользоваться хранилищем значения, выяснилось, что конструкция вида:
Работающим оказался вариант с двойной сериализацией, когда в хранилище значения добавляется уже сериализованный объект, и затем оно ещё раз сериализуется, например, так:
На принимающей стороне при этом код выглядит так:
Экономия на размере пакета получается примерно десятикратная.
Вопрос: это единственно правильный способ работы с хранилищем значений с целью упаковки пакета передачи данных?
У меня при выполнении команды обмена в клиенте вылезла такая ошибка. С чем может быть связана?
: Ошибка при вызове метода контекста (ВыполнитьОбмен)
Ответ = Десериализовать(Соединение.ВыполнитьОбмен(СтрокаДанных));
по причине:
Ошибка вызова операции сервиса: :DataTransfer:ВыполнитьОбмен()
по причине:
Ошибка SOAP сервера: Обязательное возвращаемое значение не задано: DataTransfer>:DataTransferSoapBinding:ВыполнитьОбмен()
Чтобы увидеть материал текущего курса, нужно регистрировать токен с 20.04.2014? Если с сегодняшнего дня, то ничего не увижу уже? А если с 20.04.2014, то доступ прекратиться 30.04.2014 или у меня всегда будет доступ к материалам, выложенным за этот период?
Добрый вечер.
Перехожу по опубликованной ссылке, а у меня вот так выглядит
This XML file does not appear to have any style information associated with it. The document tree is shown below.
Операция не найдена: :ОбменДанными:ВыполнитьОбмен()
Ругается на операцию , а потом не подключается WS ссылка
Ошибка разбора XML: [-1,1]
Фатальная ошибка
НО не добавляет второй параметр в строчке:
Ответ = Соединение.ПолучитьСреднее(СтруктураДанных);
(Процедура ПодключитьсяЧерезСтатическуюСсылкуНаСервере()).
Цель блога описать интересные и полезные примеры программирования в системе 1С:Предприятие 8.
воскресенье, 14 октября 2012 г.
1С:Предприятие 8. Веб-сервисы. Реализация веб-сервиса
После этих действий веб-сервисом можно будет пользоваться. Таким образом будет создан веб-сервис, который сможет оперировать только простыми типами данных.Откройте конфигурацию и в дереве метаданных найдите ветку "Общие - Web-сервисы". Нажмите правой кнопкой и добавьте новый элемент.
Имя веб-сервиса можно задать русское. И платформа его сохранит и опубликует, но рекомендую использовать латиницу в названиях веб-сервисов, ws-операций, параметров ws-операций. Например, chrome не смог отобразить wsdl файл веб-сервиса с русским именем.
Перейдите на вкладку "Прочее" и укажите параметр "URI пространство имен".
В документации об этом параметре написано чуть больше чем ничего, примерно то, что это поле служит для идентификации вашего веб-сервиса. Когда я делал свой первый веб-сервис, мне казалось что это ссылка на сайт, на котором я публикую свой веб-сервис и все наименования буду получаться через запрос к этому сайту. На самом деле "URI пространство имен" не что иное как строка определяющая название набора ваших имен (названий веб-сервиса, операций, параметров, типов данных и т.д.). То есть если вы объявите свой тип "integer" то xml-парсер не будет ругаться, так как этот тип принадлежит вашему пространству имен. Мало того если "URI пространство имен" будет содержать русские символы и не будет соответствовать стандарту как формат URI, платформа все равно опубликует такой веб-сервис, и он будет работать. Но по стандартам рекомендуется использовать URI ссылку. Я советую того же самого.
Простое и понятное объяснение пространства имен можно прочитать тут.
Поле "Пакеты XDTO" не обязательное. Оно определяет набор пакетов XDTO в которых вы можете оказать свои типы значений. Это не обязательное поле, по умолчанию вам всегда доступны типы пространства имен "http://www.w3.org/2001/XMLSchema". О пакетах XDTO я расскажу чуть позже.
"Имя файла публикации", это имя файла, в котором хранятся настройки веб-сервиса для Apache(путь к базе и другие) после публикации. Папка, в которой находится этот файл, определяется при публикации. О публикации на веб-сервере будет рассказано позже.
Веб-сервис создан, но еще нет ни одной функции которую он мог бы исполнить. Надо добавить операцию. Для этого добавьте в созданный веб-сервис операцию. Нажмите не веб-веб-сервис правой кнопкой и выберите "Добавить-Операция". Она будет к вашему операнду прибавлять 2 и возвращать значение. Давайте назовем ее "Plus2". Можно указать и русское название, многие клиенты его обработают, но все же могут возникнуть проблемы.
"Тип возвращаемого значения" это тип описанный в указанном вами пакете XDTO или же тип из пространства имен "http://www.w3.org/2001/XMLSchema". Именно в этом типе веб сервис будет возвращать значение.
"Возможно пустое значение" признак что ws-операция может не вернуть значение( nillable webkit-html-attribute-value" style="font-family: monospace; font-size: 13px;">true " ).
"В транзакции" указывает что код веб-сервиса будет выполняться в транзакции. А "Режим управления блокировкой данных" определяет тип блокировки данных при транзакции по умолчанию.
Установим тип возвращаемого значения в int. В поле "Имя метода" укажем имя "Plus2" для нового метода, который будет выполнять обработку. При нажатии на лупу метод будет автоматом создан в модуле веб-сервиса.
Напишем простой код.
Функция Plus2(Параметр)
Возврат Параметр+2;
КонецФункции
Вы заметили что на входе функции у нас есть параметр "Параметр". Для того что бы в метод этот параметр был передан надо добавить его в дереве метаданных. Для этого щелкните правой кнопкой по веб-операции Plus2 и выберите "Добавить-Параметр".
Давайте назовем его "Param". Названия параметров тоже можно указывать русскими, мало того класс SoapClient языка PHP работает с ними корректно, ведь параметры передаются через массив. Желательно использовать кодировку UTF-8.
Укажем "Тип значения" int из пространства имен "http://www.w3.org/2001/XMLSchema".
Читайте также: