Обращение к Web-services

Тема в разделе "Lotus + Java + LS2J", создана пользователем Klido, 30 мар 2010.

  1. Klido

    Klido Гость

    Неожиданно возникла тема подключаться к удаленным вэб-сервисам. Поскольку ранее не приходилось этого делать, есть вопрос.
    Нарыл разных способов подключения, интересует сервер-сервер. SOAPConnector класс для LS с sandbox кажется наиболее подходящим на данный момент, но как-то староват он (2002 год...). Есть ли у кого опыт активного использования неродных вэбсервисов именно на стороне сервера, что наиболее правильное задействовать (или всё-таки клиентская часть?) и есть ли там ньюансы, которые стоит сразу учесть? Дабы не терять драгоценное время на раскопки...
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
  3. Реник

    Реник Well-Known Member

    Регистрация:
    8 авг 2009
    Сообщения:
    97
    Симпатии:
    0
    <!--shcode--><pre><code class='аа'>Dim Connector As Variant, Serializer As Variant, Reader As Variant
    On Error Goto ERROR_HANDLER

    Set Client =CreateObject("MSSOAP.SoapClient30")
    Set Serializer =createobject("MSSOAP.SoapSerializer30")
    Set connector =createobject("MSSOAP.HttpConnector30")

    Set Reader=createobject ("MSSOAP.SoapReader30")


    Connector.Property("EndPointURL") = wsdllink
    Connector.Property("UseSSL") = True
    Connector.Property("AuthUser") = login
    Connector.Property("AuthPassword") = Passw0rd



    Call Connector.Connect
    ' устанавливаем Тайм-аут ,чтобы сервис сммог отработать нормально
    Connector.Property("Timeout") = 300000
    Connector.Property("ConnectTimeout")=300000
    Connector.Property("SoapAction") ="параметр Soap Action из wsdl"

    Call Connector.BeginMessage

    ' ловим выходной поток отработки метода wsdl- файла

    ' здесь надо заменить "http://schemas.xmlsoap.org/soap/envelope/" на то,что будет стоять в wsdl на ссответсвующем месте
    Serializer.Init Connector.InputStream
    Serializer.StartEnvelope "SOAP-ENV" , "http://schemas.xmlsoap.org/soap/encoding/"
    Serializer.StartBody


    ' когда будет измененго название метода, то его надо будет включить сюда
    Serializer.StartElement "WriteUpdateSdelkaInfo" , "https://mspvm03.it.ru:442/"


    Serializer.startElement "название параметра из WSDL , куда записываем значение" , "https://mspvm03.it.ru:442/"
    Serializer.writeString param0
    Serializer.EndElement


    Serializer.EndElement


    Serializer.endBody

    Serializer.endEnvelope


    'Проверяем на наличие ошибок


    Call Connector.EndMessage


    Reader.Load Connector.OutputStream


    Set SoapServer = CreateObject("MSSOAP.SoapServer30")

    SoapServer.SoapInvoke Connector.InputStream, Connector.OutputStream, SOAPAction


    runmethodfromwsdlfile=Cstr(Reader.Body.xml)

    Msgbox "Результат работы метода" + runmethodfromwsdlfile

    ERROR_HANDLER:
    Print "Ошибка " & Cstr(Err) & " (" & Error & ") в строке " & Cstr(Erl)[/CODE]Есть ещё один вариант: не знаю понравится-нет,но работает 100%.

    1. На сервер поставить SOAP Toolkit 3.0.

    2. Далее можно написать следующего агента на LS, котoрый будет вызывать web-service и т авит необходимый TimeOut (если надо):
     
  4. Klido

    Klido Гость

    Реник
    всё бы ничего, но MSSOAP не катит - сервак на линухе... С Java всё понятно, осталось решить запариться ли в неё или всё-таки LS-классом быстрее :bequiet:
     
  5. vincent_vega

    vincent_vega Lotus team
    Lotus team

    Регистрация:
    2 апр 2005
    Сообщения:
    165
    Симпатии:
    1
    +1 за java.
    Для тестов вызова веб-сервисов рекомендую использовать soapUI
     
  6. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    В подобном случае писал java-библиотеку (класс с постящей функцией и sax-парсером для разбора ответа), а вызывал через LS2J. За день разобрался.
     
  7. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    799
    Симпатии:
    78
    А чем встроенный не подходит?

    Web Service Consumer PortType class In the Web Service Provider feature, first available in Release 7.0, the PortType class is where the application developer enters their code that executes to process a web service request. In the Web Service Consumer feature, first available in Release 8.0, the PortType class is completely generated, based on the WSDL document. It contains methods for all the operations described in the imported WSDL document. The WSDL generated PortType class derives from this PortTypeBase class. The PortTypeBase class provides a set of common operations that are useful in writing client-side applications for web services.
     
  8. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Как я понял, встроненный веб-сервис работает когда клиент (или другой сервер) запрашивает информацию с сервера Domino. В случае, когда серверу Domino нужно запросить информацию с другого сервера, они не работают. Поправьте, если я ошибаюсь.
     
  9. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    799
    Симпатии:
    78
    Ошибаетесь - реализовано и то и другое.
    http://infoworx.se/help/help85_designer.ns...d9?OpenDocument
     
  10. Klido

    Klido Гость

    rinsk
    точно, похоже то, что надо! :) как-то в этот раздел после 7-ки не смотрел, а для 7-ки только провайдер сервисов был... пошел тестить...
     
  11. Klido

    Klido Гость

    Web Service Consumer - прикольная штука. Да, генерит классы для работы со сторонними WS, но...
    Как раз там, где надо, сменилась версия на серваке WS Axis c 1 на 2 и лезет ошибка при генерации, мол не хватает чего-то там в wsdl... в инете похожие у народа есть ошибки - мол что-то про некорректность отдачи wsdl при смене версий именно для soap 1.1, который имеется в DD 8.5.1фп1. Не тянет ни в LS, ни в Java...
    Вот интересно, даже если получить классы каким-либо иным способом (ну там wsdl2java, например) и засунуть их в WSC - будет оно работать или не даст скомпилить?
    И, похоже, придется топать по этой теме на форумы JAVA....
     
  12. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Достоинство — простота, недостаток — не работает (с)...
    Попробовал создать Web Service Consumer (на ЛС), получил wsdl, импортнул в библиотеку, как в справке описано, получил класс в десять строк кода.
    Создаю экземпляр сего класса, вызываю его единственный метод и Лотус виснет :(
     
  13. Klido

    Klido Гость

    у меня вроде как работает, но трабл в другом.. и следствие зашло в тупик ;)
    Есть внешний wsdl, домино не генерит по нему классы с еррором... Более того, всякие XMLSpy ругаются на то, что некорректный wsdl... Суппорт хозяев софтины, что wsdl предоставляет отморозились и говорят, что работает как задумано... В окрестностях знатоков wsdl нет, чтоб сказать как именно поправить надо...
    Если кто поможет решить - буду признателен, вот файло... Конечная цель - получить корректный wsdl хотя бы, чтоб на его основе сгенерило мне классов...
    Посмотреть вложение SDService.zip
     
  14. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Стоит попробовать для начала убрать табуляторы и переводы строк.
     
  15. Klido

    Klido Гость

    мда? у меня нет никаких табуляторов.... или в нотепаде надо смотреть? ;) кстати, вот тут видно и еррор, который говорит тулза...
    wsdl.jpg

    element <fault> 'RemoteException' in operation 'getServiceCallEventLog' (portType 'SDServicePortType') has no match in operation 'getServiceCallEventLog' (binding 'SDServiceHttpBinding')!
     
  16. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    — я смотрел в виндовым блокнотом. Уже натыкался, что Лотус с такими хмл не очень дружит.
     
  17. Klido

    Klido Гость

    ну это версия wsdl-2, с 1-й он дружит прекрасно... но там нет половины того, что есть в этой... и хз как, что и куда надо поменять ;) нет желания углубить свои познания в wsdl ;)
     
  18. vincent_vega

    vincent_vega Lotus team
    Lotus team

    Регистрация:
    2 апр 2005
    Сообщения:
    165
    Симпатии:
    1
    Просто так этот вебсервис в лотус не затянуть. Не сможет он его корректно обработать. Поэтому попробуйте использовать какойто фреймворк. Вот например сгенерированные классы под axis2.
    Посмотреть вложение n.zip
     
  19. Klido

    Klido Гость

    vincent_vega
    чем порекомендуете сделать java-классы? есть эклипс, но под него axis плагины что-то не хотят работать...
     
  20. vincent_vega

    vincent_vega Lotus team
    Lotus team

    Регистрация:
    2 апр 2005
    Сообщения:
    165
    Симпатии:
    1
    можно из командной строки, но лучше как я советовал пользоваться soapUI (им пользуются даже бимеры)
     
Загрузка...
Похожие Темы - Обращение Web services
  1. Bafomet
    Ответов:
    18
    Просмотров:
    167
  2. Shouldercannon
    Ответов:
    1
    Просмотров:
    151
  3. proteam
    Ответов:
    7
    Просмотров:
    793
  4. Вовкин
    Ответов:
    0
    Просмотров:
    723
  5. Вовкин
    Ответов:
    0
    Просмотров:
    687

Поделиться этой страницей