Альтернатива Mssoap По Работе С Веб-сервисом

Тема в разделе "Lotus - Программирование", создана пользователем Kizarek86, 11 фев 2013.

  1. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Доброго дня.

    Подтолкните куда смотреть.

    Есть доминошный веб сервис, надо с ним "пообщатся", MSSOAP - отваливается т.к. не работает на win server 2008.

    Идеальная схема через LS агент.
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
  3. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Работайте через Web Services Consumers.
     
  4. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Не очень я понял как в этом случае обращатся к своему веб-сервису.
     
  5. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Есть веб сервис, например с таким кодом (взято из примера, где работа идет с SOAP)
    Код (Text):
    'Declare global variables accessible from all parts of this Web service.
    Dim session As NotesSession
    Dim nabdb As NotesDatabase
    Dim nabdoc As NotesDocument
    Dim nabview As NotesView
    Dim item As NotesItem

    'Create a LotusScript class.
    Class GetPersonInfo
    'Sub New can be used to assign values to global
    'variables. Here we can set our session object.
    Sub New
    Set session = New NotesSession
    End Sub
    'GetPhoneNumber accepts name of a person as function argument.
    'We set output type to data type String.
    Public Function GetPhoneNumber(personname As String) As String
    ' If person's document is not already found in previous actions, find it now
    If nabdoc Is Nothing Then
    'Locate a document using our search function
    result=GetPersonDocument(personname)
    End If
    If result<>"OK" Then
    'If no person document is found, return the error message
    'we got from the GetPersonDocument function
    GetPhoneNumber="ERROR: "+result
    Exit Function
    Else
    'If person document is found, return content of OfficePhoneNumber field
    'We use our GetPersonField reusable function for getting field’s content
    GetPhoneNumber=GetPersonField("OfficePhoneNumber")
    End If
    End Function

    Public Function GetEmailAddress(personname As String) As String
    If nabdoc Is Nothing Then
    ' If person's document is not already found in previous actions, find it now
    result=GetPersonDocument(personname)
    End If
    If result<>"OK" Then
    'If no person document is found, return the error message
    'we got from the GetPersonDocument function
    GetEmailAddress="ERROR: "+result
    Exit Function
    Else
    'If person document is found, return content of MailAddress field
    'We use our reusable function for getting field’s content
    GetEmailAddress=GetPersonField("MailAddress")
    End If
    End Function

    End Class

    Private Function GetPersonDocument(personname As String) As String
    Set nabdb=session.CurrentDatabase
    'Set nabdb=New NotesDatabase("","names.nsf")

    ' Check that database exists and was opened
    If Not (nabdb.IsOpen) Then
    GetPersonDocument= "Error opening database"
    Exit Function
    End If

    Set nabview = nabdb.GetView("($Users)")
    'Check that view exists in the database
    If nabview Is Nothing Then
    GetPersonDocument = "Error opening view"
    Exit Function
    End If

    'Get a document by search key
    Set nabdoc = nabview.GetDocumentByKey(personname, True)
    If nabdoc Is Nothing Then
    GetPersonDocument = "Cannot find person"
    Exit Function
    End If
    ' global nabdoc object was set correctly and we can return OK
    GetPersonDocument="OK"
    End Function

    Private Function GetPersonField(FieldName As String)
    'Get item object. Global object nabdoc was set earlier in GetPersonDocument function.
    Set item=nabdoc.GetFirstItem(FieldName)

    'Sometimes item does not exist in the document, it’s not an error so we return an empty string.
    If item Is Nothing Then
    GetPersonField=""
    Exit Function
    Else
    'Return first value of the item
    GetPersonField=Cstr(item.Values(0))
    End If
    End Function
    По SOAP все просто, вызываем через него функции веб-сервиса, получаем данные.
    Код (Text):
       
    Set Client =CreateObject("MSSOAP.SoapClient30")
    Call Client.mssoapinit ("http://сервак/база/SimpleLSServiceNAB?wsdl")
    result = Client.GetPhoneNumber(personname)
     
  6. lmike

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

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

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    lmike
    чето я туплю, не вижу там примера.
    если не трудно под "SimpleLSServiceNAB" пример вызова?

    в примере код для Java библиотеки как я понял, причем там веб-сервис не совсем понятно...
     
  8. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    Код (LotusScript):
    '** everything we'll need to access our Java classes
    Dim jSession As New JavaSession
    Dim jClass As JavaClass
    Dim jObject As JavaObject

    '** get the IGWebservice class and instantiate an instance of it
    Set jClass = jSession.GetClass("ECWebservice")

    '** version of CreateObject and init with path to WSDL)
    Set jObject = jClass.CreateObject("(Ljava/lang/String;)V", connection)
    jObject.SetContentType(contentType)
    '** send message and get result: true/false, if true then we got result
    If jObject.send(xmldata) Then
    me.responce = jObject.GetResponce()
     
  9. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    lmike
    Этот кусок кода я видел, не понимаю как он применим в указанном мной примере.
     
  10. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    kizarek, а почему не рассматриваете вариант как сказал Dragon108 ?
    По моему так проще всего сделать
     
  11. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Хотелось уж с этим разобраться)
    Щас попробую через Web Services Consumers.
     
  12. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    С эти тоже траблы)
    Курю этот мануал www.ibm.com/developerworks/ru/library/domino-webservices/
    Скачал axis (http://www.sai.msu.su/apache/ws/axis/1_4/)
    Как добавить библиотеки из него в lotus?)
     
  13. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    kizarek Создаешь Web Service Consumer импортиоруешь в него WSDL (http://сервак/база/SimpleLSServiceNAB?wsdl), в нем появятся описание классов, сохраняешь.
    В агенте добавляешь use "Имя Web Service Consumer" и используешь в нем описанные классы из Web Service Consumer
     
  14. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Создайте в дизайнере новый Web Services Consumer, укажите ему wsdl файл сервиса, либо локально как файл, либо через url. Дизайнер сам сгенерит вам код вызова процедур сервиса на Lotus Script или Java. Затем в своём коде подключите этот сгенерённый Web Services Consumer в качестве библиотеки и пользуйтесь сгенерёнными процедурами. Если планируете использовать Lotus Script, могут быть проблемы с типами данных. Проблемы решаемы... Никакой axis скачивать никуда не надо, в лотусе уже всё есть.
     
  15. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Web Service Consumer != Web Service?
     
  16. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    Consumer - это клиент для сервиса.
     
  17. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    kizarek
    Если у Вас клиент семерка, там вроде нет разделения на Consumer и Provider, там просто Web service
     
  18. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    8.0.2
    я правильно понимаю что нужно:
    1. Создаем веб-сервис. Пример выше "SimpleLSServiceNAB".
    2. Сохраняем его как SimpleLSServiceNAB.wsdl
    3. Создаем еще 1 веб-сервис (SimpleLSServiceNAB_NEW), импортим в него wsdl, получаем такой код:
    Код (LotusScript):
    %INCLUDE "lsxsd.lss"
    Class GetPersonInfo

    Sub NEW
    End Sub

    Function GETPHONENUMBER(PERSONNAME As String) As String
    End Function

    Function GETEMAILADDRESS(PERSONNAME As String) As String
    End Function

    End Class
    4. Теперь подключаем его как библиотеку?
     
  19. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Да, все так.
    Но при таком подходе есть и минус - при каждом изменении web-сервиса, чью wsdl вы импортите (в данном примере это веб-сервис SimpleLSServiceNAB и его SimpleLSServiceNAB.wsdl) придется скорее всего заново импотрить эту wsdl в web service consumer (здесь - SimpleLSServiceNAB_NEW). (но может и будет работать, если изменения в сервисе SimpleLSServiceNAB не серьезные :) ) И не факт что сложные и нестандартные лотусовые типы, которые есть в wsdl, распарсятся вам в типы, методы и классы так же, как и в предыдущий раз - тупо может просто поменяться их префикс :( С MSSOAP конечно в этом плане попроще, но зато Web Service consumer работает как часы, а не через пень колоду


    Вот была тема: ссылка
     
  20. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    веб-сервис как библиотеку лотус не дает объявить. может таки как consumer нужно делать библиотеку?

    Добавлено: Если объявлять как библиотеку то такой код
    Код (LotusScript):
    Use "SimpleLSServiceNAB_NEW"
    Sub Initialize
    Dim PersonInfo As New GetPersonInfo
    Print PersonInfo.GETEMAILADDRESS("James Bond")
    End Sub
    выдет ошибку
    Код (LotusScript):
    4746-Web Service GetPersonInfo method GETEMAILADDRESS error org.xml.sax.SAXException: Processing instructions are not allowed within SOAP messages
     
Загрузка...
Похожие Темы - Альтернатива Mssoap По
  1. alik86
    Ответов:
    31
    Просмотров:
    4.653
  2. SeverBap
    Ответов:
    8
    Просмотров:
    4.537
  3. Баламут
    Ответов:
    3
    Просмотров:
    3.762
  4. Dragon108
    Ответов:
    0
    Просмотров:
    2.875

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