|
Ошибка при вызове метода web-сервиса. | ☑ | ||
---|---|---|---|---|
0
shushik
07.02.13
✎
14:21
|
В вкратце суть проблемы: есть веб-сервис из внешней системы. Там реализован метод с входным параметром и при вызове этого метода возникает ошибка: «Ошибка преобразования данных XDTO. Структура объекта не соответствует типу». Веб-сервис с которым возникает проблема реализован на стороне SAP. До этого я работала с аналогичными веб-сервисами реализованными на Java и никогда таких проблем не возникало. Не понимаю в чем дело, может быть кто-то сталкивался с подобным.
Вот сохраненная wsdl данного сервиса: http://rusfolder.com/34890963 А теперь по порядку, как и что, делаю: 1. Веб-сервис добавлен в конфигуратор в WS-ссылки. 2. Подключаю веб-сервис следующим образом Процедура ПодключитьВебСервис() ИмяСервиса="z_service"; ИмяПортаСервиса="z_service_bind"; ПространствоИмен="urn:sap-com:document:sap:soap:functions:mc-style"; ВебСервис=WSСсылки.WSintegrationSAP.СоздатьWSПрокси(ПространствоИмен,ИмяСервиса,ИмяПортаСервиса); КонецПроцедуры 3. Затем заполняю входной параметр для вызываемого метода Функция ВходнойПараметр() ТипTableOfZmaraTab = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "TableOfZmaraTab"); TableOfZmaraTab = ВебСервис.ФабрикаXDTO.Создать(ТипTableOfZmaraTab); ТипZmaraTab = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "ZmaraTab"); ZmaraTab = ВебСервис.ФабрикаXDTO.Создать(ТипZmaraTab); ТипChar18 = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "char18"); ТипChar18 = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "char18"); ТипChar2 = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "char2"); ТипChar40 = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "char40"); ТипChar4000= ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "char4000"); ТипChar9 = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "char9"); ТипUnit3 = ВебСервис.ФабрикаXDTO.Тип(ПространствоИмен, "unit3"); ZmaraTab.Matnr = ВебСервис.ФабрикаXDTO.Создать(ТипChar18, "Код"); ZmaraTab.Maktx = ВебСервис.ФабрикаXDTO.Создать(ТипChar40, "Наименование"); ZmaraTab.Ferth = ВебСервис.ФабрикаXDTO.Создать(ТипChar18, "Марка"); ZmaraTab.Meins = ВебСервис.ФабрикаXDTO.Создать(ТипUnit3, "Ед."); ZmaraTab.Matkl = ВебСервис.ФабрикаXDTO.Создать(ТипChar9, "Группа"); ZmaraTab.Attyp = ВебСервис.ФабрикаXDTO.Создать(ТипChar2, "Тп"); ZmaraTab.Lname = ВебСервис.ФабрикаXDTO.Создать(ТипChar4000,"Полное наименование"); TableOfZmaraTab.item.Add(ZmaraTab); Возврат TableOfZmaraTab; КонецФункции 4. Затем вызываю метод с входным параметром Процедура ПолучитьДанные() ПодключитьВебСервис(); ВхПараметр = ВходнойПараметр(); РезультатСервиса = ВебСервис.ZMatnrKug(ВхПараметр); КонецПроцедуры 5. В момент обращения к методу возникает вот такая ошибка Ошибка при вызове метода контекста (ZMatnrKug): Ошибка вызова операции сервиса: {urn:sap-com:document:sap:soap:functions:mc-style}:z_service:ZMatnrKug() РезультатСервиса = ВебСервис.ZMatnrKug(ВхПараметр); по причине: Ошибка вызова операции сервиса: {urn:sap-com:document:sap:soap:functions:mc-style}:z_service:ZMatnrKug() по причине: Неизвестная ошибка. Ошибка преобразования данных XDTO: Чтение объекта типа: {urn:sap-com:document:sap:soap:functions:mc-style}TableOfZmaraTab - [1,227] Проверка дополнительного свойства: форма: Элемент имя: item по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: {urn:sap-com:document:sap:soap:functions:mc-style}TableOfZmaraTab - [1,227] Проверка дополнительного свойства: форма: Элемент имя: item по причине: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: {urn:sap-com:document:sap:soap:functions:mc-style}TableOfZmaraTab |
|||
1
shushik
07.02.13
✎
15:23
|
Пожалуйста, помогите.
|
|||
2
AndyR
07.02.13
✎
15:47
|
1. У тебя переменная ВебСервис глобальная? Потому как в ПолучитьДанные() ее не видно.
2. Похоже, что доблестные сапёры поменяли тип ZmaraTab, а wsdl не обновили. Или шлют в ответ пакет с не соответствующей определению структурой ZmaraTab. Можно поставить сниффер, посмотреть что от них прилетает. |
|||
3
shushik
07.02.13
✎
17:17
|
(2)1. Да, переменная ВебСервис глобальная. В ПолучитьДанные() ее видно, просто я не вставила в сообщение объявление переменных.
2. Говорят ничего не меняли. Похоже все-таки какая-то беда с типами. Ведь входной параметр с типом TableOfZmaraTab, прекрасно создается. А при передаче его методу оказывается, что у него не тот тип, хотя как он может быть не тот, когда создаю вроде именно такой тип, не понятно. А подскажите, чем можно посмотреть что от них прилетает? Я обычно сервисы через soapUI смотрю, но сейчас в нем все работает, проблема возникает именно при обращении через 1С. |
|||
4
AndyR
07.02.13
✎
17:21
|
Судя по ошибке. она возникает в момент возврата данных из САП-а, т.е. это они вам ерунду шлют. а не ваш параметр криво сформирован.
Посмотреть сниффером (сетевым монитором), это софт такой, который может пакеты сетевые перехватывать. На вскидку Microsoft Network Monitor, например |
|||
5
AndyR
07.02.13
✎
17:22
|
А можно и soapUI на этот сервис направить, посмотреть что вернется и насколько соответствует структуре TableOfZmaraTab. Кстати, вариант, да.
|
|||
6
shushik
07.02.13
✎
18:59
|
Через soapUI структура вроде такая же как в описание. Но похоже все-таки 1С ее по другому воспринимает.Дальше хуже, саперы решили со своей стороны сделать преобразование типов через какую-то интеграционную шину и прислали новую ссылку. Но это ссылка не на wsdl, потому что когда я ее в браузере открываю пишет
Message Servlet is in Status OK Status information: Servlet com.sap.aii.af.mp.soap.web.MessageServlet (Version $Id: //tc/xi/NW04S_27_REL/src/_adapters/_soap/java/com/sap/aii/af/mp/soap/web/MessageServlet.java#1 $) bound to /MessageServlet Classname ModuleProcessor: null Lookupname for localModuleProcessorLookupName: localejbs/ModuleProcessorBean Lookupname for remoteModuleProcessorLookupName: null ModuleProcessorClass not instantiated ModuleProcessorLocal is Instance of com.sap.aii.af.mp.processor.ModuleProcessorLocalLocalObjectImpl0_0 ModuleProcessorRemote not instantiated |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |