![]() |
![]() |
![]() |
|
v8: WS-ссылки и WebService Java - не скрестить (( | ☑ | ||
---|---|---|---|---|
0
ShurupINC
19.03.10
✎
16:41
|
Здравствуйте все!
Проблема такова: на жабе (IDE NetBeans 6.8) написал веб сервис, опубликовал, в 1С создал WS-ссылку, вызываю метод сервиса - выпадает с ошибкой ... Что делал: 1. Сделал метод вот так public String getPrices(String code, int a) и в дереве WS-ссылки всё красиво и работает 2. стоит сделать вот так public String[] getPrices(String code, int a) - всё ... и в дереве WS-ссылки параметры метода getPrices сменяются с arg0 и arg1 на parameters, и вызвать уже я не могу просто Прокси.getPrice(param1, param2) - в рантайме вываливается - неверный тип параметра "1", приходится делать так: ТипGetPrices = СЦены.ФабрикаXDTO.Пакеты.Получить("http://TestWSpackage/").Получить("getPrices"); Парам = СЦены.ФабрикаXDTO.Создать(ТипGetPrices); Парам.arg0 = Артикул; Парам.arg1 = 2; рез = СЦены.getPrices(Парам); Но при этом в сервис приходят пустые переменные (под отладчиком смотрел) ... не знаю куда копать ... ПАМАГИТЕ =))) Я даже не знаю как мне посмотреть какое сообщение от 1С приходит, может подскажете чем ) |
|||
1
ShurupINC
19.03.10
✎
16:44
|
Забыл добавить - платформа 8.1.12.101
Где-то тут я читал, что у неё были проблемы с вебсервисами ... может и правда просто надо платформу обновить? |
|||
2
ShurupINC
19.03.10
✎
19:18
|
Up
|
|||
3
Fragster
гуру
19.03.10
✎
19:23
|
а зачем ты делаешь так: lic String[] g?
|
|||
4
ShurupINC
20.03.10
✎
12:01
|
На самом деле это просто как пример написано, но в любом случае у меня getPrices будет возвращать не базовый тип, а структуру, где будет разнородная информация, в частности как вариант массив или какой-нить свой класс-обертка. А это я просто показываю, что если тип возвращаемого значения сделать сложным - например массивом, то начинается ерунда. CommView подсмотрел запросы от 1С при разных вариантах объявления сервиса.
При объявлении метода сервиса так: public String getPrices(String code, int a) и при вызове в 1С так: рез = СЦены.getPrices(Артикул, 2); Запрос сервису приходит такой <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header/> <soap:Body> <m:getPrices xmlns:m="http://TestWSpackage/"> <arg0 xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">cam15</arg0> <arg1 xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2</arg1> </m:getPrices></soap:Body> </soap:Envelope> и параметры метода инициализируются правильно. При этом в 1С нормально возвращается строка. вот ответ от сервиса (дословно =) ): 6e <?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body> 7d <ns2:getPricesResponse xmlns:ns2="http://TestWSpackage/"><return>cam15</return></ns2:getPricesResponse></S:Body></S:Envelope> 0 А при объявлении метода так: public String[] getPrices(String code, int a) в 1С приходится вызывать по другому Парам = СЦены.ФабрикаXDTO.Создать(ТипGetPrices); Парам.arg0 = Артикул; Парам.arg1 = 2; рез = СЦены.getPrices(Парам); и запрос сервису такой получается: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header/> <soap:Body> <getPrices xmlns="http://TestWSpackage/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <arg0>cam15</arg0> <arg1>2</arg1> </getPrices></soap:Body> </soap:Envelope> и параметры в методе сервиса не инициализируются, и при при выходе из метода 1С валится с ошибкой: Неизвестная ошибка. Ошибка преобразования данных XDTO: Чтение объекта типа: {http://TestWSpackage/}getPricesResponse - [1,176] Проверка дополнительного свойства: форма: Элемент имя: return а ответ от сервиса приходит такой: 6e <?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body> 8f <ns2:getPricesResponse xmlns:ns2="http://TestWSpackage/"><return>Hello</return><return>0</return></ns2:getPricesResponse></S:Body></S:Envelope> 0 Такое ощущение, что 1С то ли неправильно разбирает WSDL, то ли не правильно формирует запросы. Я пока не разобрался ещё с XML-схемами, поэтому мне сложно понять в чем тут дело =) Может знающие люди сразу увидят в этом объеме данных какой-то косяк? |
|||
5
Asmody
20.03.10
✎
13:14
|
не работает 1С с веб-сервисами на java. точнее, неверно разбирает wsdl. а еще точнее, 1C "заточена" на веб-сервисы .net, а у них и у java'ских веб-сервисов wsdl разный!
проверяли - брали идентичный код на java и c#, собирали и смотрели. с c# работает, с java - нет |
|||
6
ShurupINC
20.03.10
✎
13:29
|
Спасибо большое за ответ ... подозревал, но до последнего надеялся ...
Вот косяк ... а на более свежих релизах платформы? 8.1.15.хх или даже 8.2 тоже самое? И как обходят Жаберы эти грабли? Просто у меня на жабе написаны модули которые с сайтов поставщиков инфу тянут, вот думал к 1С её прикрутить через web-сервис ... Как теперь быть? |
|||
7
Asmody
20.03.10
✎
13:45
|
(6) как вариант - "чуть" подправлять wsdl и прочие ответы сервиса. В теории все понятно, но до практического решения ни у кого руки не доходят
|
|||
8
ShurupINC
20.03.10
✎
14:07
|
Ок, понятно ... но допустим ответы сервиса наверное можно подправить ... а вот запросы как подправить? ведь по сути и запрос не верны - параметры метода ведь не иницализируются ... Как вариант конечно можно написать некую проксю, которая будет транслировать запрос/ответ серверу/клиенту, приводя их в "соответствие", но видимо это надо делать не на жабе, а тогда хрень получается - кусок на одном, ку сок на другом ... =)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |