LotusNotesDomino 7 Web ServicesWord格式文档下载.docx
- 文档编号:22829272
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:49
- 大小:196.38KB
LotusNotesDomino 7 Web ServicesWord格式文档下载.docx
《LotusNotesDomino 7 Web ServicesWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《LotusNotesDomino 7 Web ServicesWord格式文档下载.docx(49页珍藏版)》请在冰豆网上搜索。
接口的底层由供应商实现,但大多数供应商将接口映射为支持的编程语言的过程调用。
来自消费者的入站请求传递给底层代码,然后结果返回给消费者。
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)
<
partname="
dbname"
type="
xsd:
string"
/>
(5)
viewname"
n"
int"
/wsdl:
message>
getNthSubjectResponse"
getNthSubjectReturn"
(6)
portTypename="
GetSubjectPortType"
(1)
operationname="
getNthSubject"
parameterOrder="
dbnameviewnamen"
(2)
inputmessage="
impl:
getnthSubjectRequest"
name="
GetNthSubjectRequest"
(3)
outputmessage="
GetNthSubjectResponse"
operation>
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.NewWebService
WebServicesProperty框有三个类似代理的选项卡。
下面是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
%INCLUDE"
lsxsd.lss"
DimsAsNotesSession
ClassGetSubject
SubNEW
Sets=NewNotesSession
EndSub
FunctiongetNthSubject(dbnameAsString,viewnameAsString,nAsLong)AsString
!
Codefordoingtheoperationgoeshere
EndFunction
EndClass
下面是Java代码的模板,其中Web服务包含一个操作。
构造函数必须是默认构造函数(无参数)。
其他构造函数被忽略。
importlotus.domino.*;
importlotus.domino.types.*;
publicclassGetSubject{
Sessions;
publicGetSubject(){
s=WebServiceBase.getCurrentSession();
}
publicStringgetNthSubject(Stringdbname,Stringviewname,intn){
//Codefordoingoperationgoeshere
现在我们将扩展示例以包括工作代码。
下面是LotusScript代码:
DimdbAsNotesDatabase
DimviewAsNotesView
DimdocAsNotesDocument
Setdb=s.GetDatabase("
"
dbname)
IfNot(db.IsOpen)Then
getNthSubject="
Cannotopendatabase"
&
dbname
ExitFunction
EndIf
Setview=db.GetView(viewname)
IfviewIsNothingThen
Cannotopenview"
viewname
Setdoc=view.GetNthDocument(n)
IfdocIsNothingThen
Cannotgetdocument"
n
Ifdoc.HasItem("
Subject"
)Then
getNthSubject=doc.GetItemValue("
)(0)
Else
DocumentdoesnothaveSubject"
下面是Java代码:
Stringsubject=null;
try{
Databasedb=s.getDatabase(null,dbname);
if(!
db.isOpen())subject="
+dbname;
else{
Viewview=db.getView(viewname);
if(view==null)subject="
+viewname;
Documentdoc=view.getNthDocument(n);
if(doc==null)subject="
+n;
if(doc.hasItem("
))
subject=doc.getItemValueString("
);
elsesubject="
;
catch(Exceptione){
subject=e.toString();
e.printStackTrace();
returnsubject;
调用和测试Web服务
最终,Web服务设计元素必须驻留在运行HTTP的Domino7服务器上。
我们可以测试驻留于DominoDesigner上的Web服务设计元素。
首先必须在启动HTTP的任何位置(比如,窗体)选择WebBrowser中的Design-Preview。
如果消费者与Notes客户机位于同一机器上,则使用127.0.0.1作为计算机地址。
要扮演Web服务的消费者,必须在HTTP请求中向DominoWeb服务的URL发送一条SOAP消息。
URL如下:
SOAP消息如下:
SOAP-ENV:
Envelope
ENV="
http:
//schemas.xmlsoap.org/soap/envelope/"
xmlns:
xsd="
//www.w3.org/2001/XMLSchema"
Body>
ns0:
getNthSubject
SOAP-ENV:
encodingStyle="
//schemas.xmlsoap.org/soap/encoding/"
ns0="
urn:
DefaultNamespace"
dbnamexsi:
type="
Webservices2<
/dbname>
(2)
viewnamexsi:
MainView<
/viewname>
nxsi:
2<
/n>
/ns0:
getNthSubject>
/SOAP-ENV:
Envelope>
在本例中,SOAP消息
(1)标识操作,
(2)并提供输入部分的值。
显示在SOAP-ENV:
body中的特定元素由WSDL绑定特征确定,尤其是SOAP消息格式。
(详细信息请参阅下文的“高级属性”)。
Web服务的WebSphereSDK提供了调用Web服务和查看结果的工具。
此SDK运行于Eclipse中。
必须安装:
∙Eclipse2.1
∙IBMWebSphereSDKforWebServicesVersion5.1
WebSpereSDK(截止撰写本文时)不与Eclipse3.0一起使用。
还可以使用WebSphereStudioApplicationDeveloper来调用Web服务。
最新版本是v5.1.2。
要支持WebSphereSDK工具,打开Eclipse并选择Run-LaunchtheWebServicesExplorer。
WebServicesExplorer加载后:
1.单击WSDLPage图标。
它是右上角右箭头之后的第三个图标。
WSDLMain链接显示在左边的Navigator窗格中。
2.单击WSDLMain链接。
OpenWSDL框显示在右窗格中。
3.用命令?
WSDL输入Web服务的URL,例如,Go。
我们想要?
WSDL(而非?
OpenWebService),因为此处WebServicesExplorer阅读WSDL文档。
4.WSDLBindingDetails框显示在右窗格中,它包含到Web服务定义的操作的链接。
5.单击操作名称,例如getNthSubject。
显示InvokeaWSDLOperation框。
6.输入输入部分(参数)的值,然后单击Go。
响应返回在底部(Status)窗格中。
调用示例Web服务之后,WebServicesExplorer的外观如下。
图5.WebServicesExplorer
Actions框的右上角有Source链接。
单击Source显示实际SOAP消息。
可以修改SOAP消息,然后单击Go将其发送。
单击右上角的Form以返回到原始显示。
Status框也有Source链接,该链接允许查看SOAP响应,如果状态指示没有要显示的内容(且期望响应),则代码可能失败了。
运行Web服务之后,检查服务器控制台或log.nsf以获得错误消息。
可以通过插入MessageBox语句来登录或调试,从而打印到服务器控制台或log.nsf。
(不要使用Beta2中的Print打印语句。
这些语句转到代理的HTTP流并破坏SOAP响应。
)
高级属性
属性框的Advanced选项卡影响WSDL文档反映的Web服务定义。
图6.WebServicesProperty框的Advanced选项卡
可以提供想要为端口类型、服务元素和服务端口命名的名称。
例如,可以将GetSubject用作所有名称。
为了清晰,使用反映元素类型的后缀。
在属性框中提供名称时,这些名称插入到生成的WSDL文档中。
如果导入WSDL文档,则WSDL文档中的名称自动插入到属性框中。
下面是GetSubject示例完整的WSDL文档。
注释部分是WebServicesProperty框的Advanced选项卡反映的内容。
?
xmlversion="
1.0"
encoding="
UTF-8"
definitionstargetNamespace="
xmlns="
//schemas.xmlsoap.org/wsdl/"
apachesoap="
//xml.apache.org/xml-soap"
impl="
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LotusNotesDomino Web Services