Модераторы: stron
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Взаимодействие 1c V8.1 с Java WS (SOAP), не работает :-( 
:(
    Опции темы
Vasay
Дата 8.9.2010, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 1
Всего: 73



Всем привет.

Вот хочу подружить 1с-ку с Java Web-сервисом.


Попытка 1. axis 2

создал веб-сервис

Код написан на Groovy (Grails + axis 2):
Код

package ru.vasay.orderinfo

import ru.vasay.orderinfo.view.*
import javax.jws.*

class SoapService {
    
    static expose=['axis2']
    

    UserView[] getUsersForSync (@WebParam(name="onlyNew") String onlyNew){
        onlyNew = onlyNew + " !!" // просто проверка того что пришло
        List users = []
        def userList = User.list() // Выгружает всех пользователей из БД с помощью GORM.  
        
                            // Цикл по всем пользователям
        userList.each(){ 
            def user = new UserView()

            
            user.setEmail(it.email)
            user.setUsername(it.username)
            user.setName(it.name)
            user.setPhone(it.phone)
            user.setAdresse(it.adresse)
            user.setLink1c(it.link1c)
            user.setEnabled(it.enabled)
            user.setAccountLocked(it.accountLocked)

            users << user // добавляем объект в коллекцию
             
        }
                            users as UserView[]  // преобразовывает List в массив и возвращает результат (return в Groovy можно упустить)
        
    }
    
}



getUsersForSync получает строку (просто для проверки - дошла или нет), возвращает массив UserView - код ниже:

Код

package ru.vasay.orderinfo.view

import javax.xml.bind.annotation.*

@XmlAccessorType(XmlAccessType.FIELD)
class UserView {
    String username
    String email
    String name
    String phone
    String adresse
    String link1c
    boolean enabled
    boolean accountLocked

}



Генерится огромный WSDL см. приложенный файл

При попытке в 1с создать ссылку - получаю ошибку:

Цитата

Несоответствие типов XDTO
по причине:
Ошибка проверки данных XDTO:
Значение: 'this$dist$get$2' не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}NCName
Значение не соответствует образцу




ок. Поменял axis2 на CXF..............

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  wsdlAxis2.txt 39,53 Kb


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Vasay
Дата 8.9.2010, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 1
Всего: 73



........................... продолжение:

код сервиса чуток поменялся (стр 8 и 11).  Также добавил простой метод для myTest эксперемента

Код

package ru.vasay.orderinfo

import ru.vasay.orderinfo.view.*
import javax.jws.*

class SoapService {
    
    static expose=['cxf']
    

    UserView[] getUsersForSync (String onlyNew){
        onlyNew = onlyNew + " !!"
        List users = []
        def userList = User.list()
        
        userList.each(){
            def user = new UserView()

            
            user.setEmail(it.email)
            user.setUsername(it.username)
            user.setName(it.name)
            user.setPhone(it.phone)
            user.setAdresse(it.adresse)
            user.setLink1c(it.link1c)
            user.setEnabled(it.enabled)
            user.setAccountLocked(it.accountLocked)
            users << user
            
        }
        UserView[] toReturn = users as UserView[]
        return toReturn
        
    }


    // простой метод для эксперемента
    String myTest(String str){
        str+" new string русский"
    }
    
}


Сгенеренный WSDL поменьше (смотри прикрепленный файл) и !!!Главное!!! в 1с создалась ссылка:

user posted image



Сначала попробовл с простым методом myTest - и, о чудо, он заработал.

Код

    СервисOrderInfo=WSСсылки.WSСсылка1.СоздатьWSПрокси("http://orderinfo.vasay.ru/", "SoapServiceService", "SoapServicePort" );
    ТестоваяСтрока = СервисOrderInfo.myTest("тест");
    Лог = Лог + ТестоваяСтрока+Символы.ПС;

 

В логе появилось: "тест new string русский"


А вот  getUsersForSync заставить работать у меня не получилось.................................... (продолжение следует)


Это сообщение отредактировал(а) Vasay - 8.9.2010, 16:50

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  wsdlcxf.txt 3,84 Kb


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Vasay
Дата 8.9.2010, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 1
Всего: 73



................... пробовал различные варианты кода.

Вот один, например:

Код

    ПроксиOrderInfo=WSСсылки.WSСсылка1.СоздатьWSПрокси("http://orderinfo.vasay.ru/", "SoapService", "SoapServicePort" );
    
    Фабрика = ПроксиOrderInfo.ФабрикаXDTO;
    

    ТипGetUsersForSync            = Фабрика.Тип("http://orderinfo.vasay.ru/","getUsersForSync");
    ТипGetUsersForSyncResponse    = Фабрика.Тип("http://orderinfo.vasay.ru/", "getUsersForSyncResponse");
    
    ПараметрыСервиса            = Фабрика.Создать(ТипGetUsersForSync);
    ПараметрыСервиса.onlyNew        = "Бла бла бла";
    
    ОтветСервиса                = Фабрика.Создать(ТипGetUsersForSyncResponse);
    
    ОтветСервиса                = ПроксиOrderInfo.getUsersForSync(ПараметрыСервиса);



В отладчике WEB-сервиса видно, что метод getUsersForSync вызывается, но строка onlyNew - null, вместо "Бла бла бла"

а 1с выдает ошибку: 
Цитата

{Обработка.СинхронизацияПользователейСайта.Форма.Форма(90)}: Ошибка при вызове метода контекста (getUsersForSync): Ошибка вызова операции сервиса:  {http://orderinfo.vasay.ru/}:SoapService:getUsersForSync()
    ОтветСервиса    = ПроксиOrderInfo.getUsersForSync(ПараметрыСервиса);
по причине:
Ошибка вызова операции сервиса:  {http://orderinfo.vasay.ru/}:SoapService:getUsersForSync()
по причине:
Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://orderinfo.vasay.ru/}getUsersForSyncResponse - [1,158]
Проверка дополнительного свойства:
    форма: Элемент
    имя: return
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://orderinfo.vasay.ru/}getUsersForSyncResponse - [1,158]
Проверка дополнительного свойства:
    форма: Элемент
    имя: return
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://orderinfo.vasay.ru/}getUsersForSyncResponse





Вот такие вот дела.

п.с. свою проблему решил POST - запросом. Но хотелось бы добить web-сервисы, если это возможно.

Добавлено через 5 минут и 54 секунды
Ссылки по теме:

моя ветка на мисте:
http://www.forum.mista.ru/topic.php?id=503565

примеры создания веб-сервисов с помощью Grails
cxf: http://grails.org/plugin/cxf 
axis2: http://grails.org/plugin/axis2 

Темы про 1с и web-сервисы:
Использование внешних web-сервисов в 1С:Предприятие 8: http://www.forum.mista.ru/topic.php?id=383089
http://www.forum.mista.ru/topic.php?id=383089
В продолжение темы "Web-сервисы пример аэрофлот" : http://www.forum.mista.ru/topic.php?id=407069


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Vasay
Дата 8.9.2010, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 1
Всего: 73



Поигрался с eclipse Web Service Explorer

Вот что получается:

SOAP Request Envelope
Код

- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://orderinfo.vasay.ru/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Body>
- <q0:getUsersForSync>
  <onlyNew>qqqqq</onlyNew> 
  </q0:getUsersForSync>
  </soapenv:Body>
  </soapenv:Envelope>


SOAP Response Envelope: 
Код

- <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
- <soap:Body>
- <ns1:getUsersForSyncResponse xmlns:ns1="http://orderinfo.vasay.ru/">
- <return>
   <username>MyUserName</username> 
  <email>[email protected]</email> 
  <enabled>true</enabled> 
  <accountLocked>false</accountLocked> 
  </return>
  </ns1:getUsersForSyncResponse>
  </soap:Body>
  </soap:Envelope>


что-то не все данные в XML-е. Нет полей, которые NULL

Это сообщение отредактировал(а) Vasay - 8.9.2010, 18:49


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "1C: Предприятие, SAP, ERP и учётные системы"
stron

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...)

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, stron, Pegas.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема »


 




[ Время генерации скрипта: 0.1086 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.