LotusNotesDomino7WebServices

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

LotusNotes/Domino7WebServicesWeb服务是可以通过在Internet上发送消息来调用的远程操作的档案。Web服务供应商发布用于查询和使用的Web服务,而Web服务消费者调用来自这些服务的操作。Web服务供应商提供了定义服务接口的WSDL(WebServicesDescriptionLanguage,Web服务描述语言)文档。WSDL文档是XML格式的。接口的底层由供应商实现,但大多数供应商将接口映射为支持的编程语言的过程调用。来自消费者的入站请求传递给底层代码,然后结果返回给消费者。LotusDomino将WSDL接口映射为可以用LotusScript或Java编码的类似代理的Web服务设计元素。要被使用,Web服务必须位于启用HTTP的Domino服务器上。(我们可以通过Notes客户机预览中的HTTP会话测试Web服务。)通过下列DominoURL命令之一进行访问:?OpenWebService调用Web服务以响应通过HTTPPOST发送的SOAP编码消息。HTTPGET(例如,浏览器查询)返回服务的名称及其操作。?WSDL返回WSDL文档以响应HTTPGET。本文描述LotusNotes/Domino7中的Web服务器设计元素,并提供了设计元素的LotusScript和Java示例。本文假设您是了解LotusScript或Java的经验丰富的Notes应用程序开发人员。示例让我们看一个简单的例子。给定数据库名称、视图名称和文档号,我们的操作返回Subject项的内容。我们将调用操作getNthSubject。图1.getNthSubject图表要让该操作可用于外部世界,将其发布在名为GetSubject的Web服务中。GetSubject可以包含任意数目的操作。例如,可能发现getFirstSubject和getLastSubject都有用。但现在只处理示例操作getNthSubject。下列代码段摘自描述包含这样一个操作的Web服务的WSDL文档。下面看一下代码段及其注释。wsdl:messagename=getNthSubjectRequest(4)wsdl:partname=dbnametype=xsd:string/(5)wsdl:partname=viewnametype=xsd:string/(5)wsdl:partname=ntype=xsd:int/(5)/wsdl:messagewsdl:messagename=getNthSubjectResponse(4)wsdl:partname=getNthSubjectReturntype=xsd:string/(6)/wsdl:messagewsdl:portTypename=GetSubjectPortType(1)wsdl:operationname=getNthSubjectparameterOrder=dbnameviewnamen(2)wsdl:inputmessage=impl:getnthSubjectRequestname=GetNthSubjectRequest/(3)wsdl:outputmessage=impl:getNthSubjectResponsename=GetNthSubjectResponse/(3)/wsdl:operation/wsdl:portType首先看portType元素(1),它定义了服务的操作集合。我们的服务只有一个portType,它只有一个操作getNthSubject(2)。该操作有两个“消息”(3):一个用于输入,一个用于输出。消息在消息元素(4)中定义。我们看到,输入消息有三个部分(5):两个名为dbname和viewname的字符串,一个名为n的int。输出消息只有一个部分(6),即名为getNthSubjectReturn的字符串。所以,我们的操作有三个输入部分和一个输出部分,这非常巧妙地映射为具有三个只读参数和一个返回值的过程。在LotusScript中,这样的过程将通过下列函数来定义:PublicFunctiongetNthSubject(dbnameAsString,viewnameAsString,nAsLong)AsString在Java中,通过下列方法来定义:publicStringgetNthSubject(Stringdbname,Stringviewname,intn)Web服务设计元素在DominoDesigner中创建Web服务设计元素有多种可行方法。可以完全用LotusScript或Java来编码。在这种情况下,保存设计元素会生成反映LotusScript或Java代码的WSDL文档。或者可以导入现有的WSDL文档。在这种情况下,在导入的WSDL中会生成反映操作的LotusScript或Java代码。Web服务设计元素保存WSDL文档以及代码。如果公共接口未更改,则WSDL文档保持不变。如果在编码中更改了影响公共接口的部分,则会生成新的WSDL。在DominoDesigner中,Web服务设计元素驻留在Shared代码中的Agents之下。Web服务设计窗口的外观与代理设计窗口非常相似。单击“NewWebService”按钮以创建新Web服务。双击现有Web服务以对其进行编辑。图2.NewWebServiceWebServicesProperty框有三个类似代理的选项卡。下面是Basics选项卡:图3.WebServicesProperty框名称是必需的。别名和备注可以提供也可以不提供。如果编码更改引起新WSDL的生成,则会收到警告消息。PortType类是定义映射为WSDL操作的过程的类名。这些过程在LotusScript中必须是公共函数或子程序,在Java中必须是公共方法。私有函数、子程序和方法不通过Web服务接口暴露。不能在属性框中输入PortType类,除非已经通过编码或导入WSDL创建了该类。稍后将详细介绍代码。Security选项卡几乎与代理Security选项卡完全一样。稍后将详细介绍Security。Advanced选项卡具有用于定义Web服务和生成WSDL的其他信息。稍后将详细介绍。编辑器窗格与代理的编辑器窗格相似。在右下拉框中,可以选择LotusScript或Java。下面显示的是选择Java。左边是Objects和Reference窗格。图4.Web服务(Java)使用“ImportWSDL”按钮以基于现有WSDL创建新Web服务。“ShowWSDL”按钮编译对Web服务的任何更改,并显示定义公共接口的WSDL文档。“ExportWSDL”按钮编译对Web服务的任何更改,并导出定义公共接口的WSDL文档。还可以通过保存或关闭Web服务来编译。仅当公共接口更改时,才会重新生成WSDL。基本编码Web服务的代码具有下列元素:实现代码的类定义。该类必须成为属性框的Basics选项卡中命名的PortType类,且必须是公共的。在类中,Web服务中每个操作的过程(函数、子程序或方法)定义。这些过程必须是公共的。不想放在接口中的支持过程必须是私有的。LotusScript中lsxsd.lss的包含。Java中Lotus.Domino.types.*的导入。访问DominoObjects对象时NotesSession(LotusScript)或Session(Java)的初始化。对于LotusScriptobject,此操作最好是在新块中完成,对于Java,最好是在无参构造函数中完成。对于Java,使用WebServiceBase.getCurrentSession()来获得Session对象。我们可能还想使用Session.getAgentContext()来获得AgentContext对象。WebServiceBase等同于JavaAgent,但Web服务不能访问对象。惟一有用的方法是静态getCurrentSession()。下面是LotusScript代码的模板,其中Web服务包含一个操作。该操作是上述具有三个输入参数和一个返回值的示例操作。OptionPublic%INCLUDElsxsd.lssDimsAsNotesSessionClassGetSubjectSubNEWSets=NewNotesSessionEndSubFunctiongetNthSubject(dbnameAsString,viewnameAsString,nAsLong)AsString!CodefordoingtheoperationgoeshereEndFunctionEndClass下面是Java代码的模板,其中Web服务包含一个操作。构造函数必须是默认构造函数(无参数)。其他构造函数被忽略。importLotus.Domino.*;importLotus.Domino.types.*;publicclassGetSubject{Sessions;publicGetSubject(){s=WebServiceBase.getCurrentSession();}publicStringgetNthSubject(Stringdbname,Stringviewname,intn){//Codefordoingoperationgoeshere}}现在我们将扩展示例以包括工作代码。下面是LotusScript代码:OptionPublic%INCLUDElsxsd.lssDimsAsNotesSessionClassGetSubjectSubNEWSets=NewNotesSessionEndSubFunctiongetNthSubject(dbnameAsString,viewnameAsString,nAsLong)AsStringDimdbAsNotesDatabaseDimviewAsNotesViewDimdocAsNotesDocumentSetdb=s.GetDatabase(,dbname)IfNot(db.IsOpen)ThengetNthSubject=Cannotopendatabase&dbnameExitFunctionEndIfSetview=db.GetView(viewname)IfviewIsNothingThengetNthSubject=Cannotopenview&viewnameExitFunctionEndIfSetdoc=view.GetNthDocument(n)IfdocIsNothingThengetNthSubject=Cannotgetdocument&nExitFunctionEndIfIfdoc.HasItem(Subject)ThengetNthSubject=doc.GetItemValue(Subject)(0)ElsegetNthSubject=DocumentdoesnothaveSubjectEndIfEndFunctionEndClass下面是Java代码:importLotus.Domino.*;importLotus.Domino.types.*;publicclassGetSubject{Sessions;publicGetSubject(){s=WebServiceBase.getCurrentSession();}publicStringgetNthSubject(Stringdbname,Stringviewname,intn){Stringsubject=null;try{Databasedb=s.getDatabase(null,dbname);if(!db.isOpen())subject=Cannotopendatabase+dbname;else{Viewview=db.getView(viewname);if(view==null)subject=Cannotopenvi

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功