Domino中运用webservice

Lotus Domino V7.0 Lotus Domino Designer 中引入了新的 Web 服务设计元素。因此在Lotus Domino应用开发中使用Web 服务变得更加容易。其中Lotus Domino 负责处理所有的 WSDL 创建和 SOAP 操作,我们所要做的事情就是在 Web 服务设计元素中编写代码,设计Web 服务。Lotus Domino 就可以发布 WSDL 文件、将引入的 SOAP 请求转换为类上的方法调用以及返回方法的结果(如果有的话)作为 SOAP 响应。Lotus Domino Web 服务可以用lotus script,java两种语言编写。而调用Web 服务的方法却有很多。

 

一、设计Web 服务。

 

 

点新建Web 服务。设计自己的Web 服务。

 

 Web Service Properties 框中的 Basics 附签

Basic 附签上的字段说明如下:

扫描二维码关注公众号,回复: 697523 查看本文章

Name(必需的):Web 服务的名称,是客户机访问 WSDL 文件或服务的方法时所使用的名称。

Alias:除 Name 之外的另一名称,用户使用该名称可以访问服务。

Comment有关 Web 服务的信息数据的字段(通常,该字段的信息不超过一句话;有关 Web 服务的较长描述或信息应写在代码的注释中)。

Warn if the WSDL interface is modified该选项警告您对代码所做的更改是否修改了由 Web 服务产生的 WSDL 文件。这对于确保 WSDL 文件的一致很有用,但是应该意识到,如果选中了该选项,则您将无法保存带有已修改的 WSDL 文件的服务。

PortType class(必需的):用作 Web 服务接口的类的名称。换句话说,它就是 Web 服务代码中带有用户可访问的 public 方法的类。

 

框中的第二个附签是 Security 附签(参见图 4)。


4. Web Service Properties 框中的 Security 附签

Security 附签上的字段说明如下:

Run as web user该选项使 Web 服务代码能够在调用 Web 服务的用户的安全性上下文中运行(默认情况下,它将在 Lotus Domino Designer 中最后签名 Web 服务的那个 ID 的安全性上下文中运行)。

Run on behalf of该字段允许指定用户,如果想让 Web 服务代码运行在特定用户的安全性上下文中,而不是 Lotus Domino Designer 中最后签名 Web 服务的那个 ID 的安全性上下文中。

Allow remote debugging该选项允许远程调试 Web 服务(有关远程调试的信息,请参阅 Lotus Domino Designer 帮助主题 “Using the Remote Debugger”)。

Profile this web service该选项将在 Web 服务运行时使其生成分析信息(有关分析的信息,请参阅 Lotus Domino Designer 帮助主题 “Profiling agents and Web services”)。

Set runtime security level设置为 1,允许大多数 LotusScript Java 操作正确运行;对于读/写文件、创建 COM 对象或执行网络操作等,根据需要,设置为 2 3(有关更多信息,请参阅 Lotus Domino Designer 帮助主题 “Restricted LotusScript and Java agent operations”)。

Default access for this web service:该选项允许控制哪些用户可以访问 Web 服务,并超出了使用数据库 ACL 所能进行的控制(如果 Anonymous 用户无法访问 Web 服务,则当用户尝试进行连接时,将收到错误 401 Access Denied 404 Not Found)。

Allow Public Access users to use this web service该选项使得仅拥有数据库 ACL “Read Public Documents” 访问权的用户可以使用该 Web 服务,当不想为大量用户授予完全的 Reader 访问权限(或更高级别)时,这点很有用。

框中的第三个附签是 Options 附签(参见图 5)。


5. Web Service Properties 框中的 Options 附签

Options 附签上的字段说明如下:

Programming model可用选项是 RPC Message(大多数情况下使用 RPC)。

SOAP message format在该字段中,为此 Web 服务选择 SOAP 消息格式,Lotus Domino V7.0 中的默认格式是 RPC/encoded

Include operation name in SOAP action该选项要求操作名称存在于外来请求的 SOAP 动作标头中(很少需要)。

Port type name默认情况下,该字段值与 Basics 附签上 PortType class 字段的值相同(尽管您可以使用任何想用的名称)。生成 WSDL 文件时使用该值。

Service element name默认情况下,该字段值是 PortType 名称加上单词 Service(尽管您可以使用任何想用的名称)。生成 WSDL 文件时使用该值。

Service port name默认情况下,该字段值是 Domino(尽管您可以使用任何想用的名称)。生成 WSDL 文件时使用该值。

 

可以选择是用lotus script JAVA语言编辑你的Web 服务。以下是lotus script编写的一个简单的例子。

 

 

 

二、Web 服务的调用

 

1 lotus script代理中调用webservice

 

window平台上我们可以使用MSSOAP toolkit来调用。可以下载MSSOAP toolkit3.0,并在服务器上安装MSSOAP toolkit3.0。在代理中的代码如下:

 

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> Sub  Initialize

    
On   Error   Goto  errhandle

    
Dim  ss  As   New  NotesSession

    
Dim  doc  As  NotesDocument

    
Set  doc = ss.DocumentContext

    
Dim  client  As  Variant

    
Dim  xmlfilename  As   String

    
Dim  xmltext  As   String

    xmlfilename
= doc.xmlfilename( 0 )

    xmltext
= doc.xmltext( 0 )

    
Set  Client  = CreateObject ( " MSSOAP.SoapClient30 "

    
Call  Client.mssoapinit ( " http://server/mis/flow.nsf/saveworkflow?WSDL " )

    
Dim  result  As   String  

    
If   Not  Client  Is   Nothing   Then

        result 
=  Client.saveworkflowxml(xmlfilename,xmltext)          

    
Else

        result
= " no web "

    
End   If  

    
Exit   Sub

errhandle: 

    
Msgbox  Str(Err) + " 行号: " + Str(Erl) + " 错误信息saveworkflowxml: " + Error $    

    
Resume   Next  

End Sub

 

2 javascript中调用 webservice

 

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> var  xmlfilename = document.all.xmlfilename.value

var  xmltext = document.all.xmltext.value

                      
var  xmlhttp  =   new  ActiveXObject( " Microsoft.XMLHTTP " );

                      
var  soapMessage, soapData, URL;

                        
//  Set the soap message

                        soapMessage 
=   " <?xml version= " 1.0 "  encoding= " utf - 8 " ?> " ;

                        soapMessage 
+=   " <soap:Envelope xmlns:xsi= " http: // www.w3.org/2001/XMLSchema-instance""

                    
+   "  xmlns:xsd= " http: // www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">";

                        soapMessage 
+=   " <soap:Body> " ;

                        
//  Set the data for soap body ---- begin ------

                        soapData 
=   " <saveworkflowxml xmlns= " http: // tempuri.org/">";

                        soapData 
+=   "     <xmlfilename> "   +  xmlfilename  +   " </xmlfilename> " ;

 soapData 
+=   "     <xmltext> "   +  xmltext  +   " </xmltext> " ;

                        soapData 
+=   " </saveworkflowxml> " ;

                        
//  Set the data for soap body ---- end ------

                        soapMessage 
=  soapMessage  +  soapData  +   " </soap:Body> " ;

                        soapMessage 
=  soapMessage  +   " </soap:Envelope> " ;

                      var  urlstr = " http://server/mis/flow.nsf/saveworkflow?openwebservice "

                        xmlhttp.Open(
" POST " ,urlstr,  false );

                        xmlhttp.SetRequestHeader (
" Content-Type " , " text/xml; charset=utf-8 " );

                        xmlhttp.SetRequestHeader (
" SOAPAction " , " http://tempuri.org/onlineandmsg " );

                        xmlhttp.send(soapMessage);

                        
var  x  =    xmlhttp.responseXML;

 

 

 

 

3 FLASH 中调用webservice

 

import mx.services.WebService;

//定义WebService的路径;

var ws_url:String = "http://server/mis/flow.nsf/saveworkflow?WSDL";

//定义WebService对象;

var ws:WebService = new WebService(ws_url);

//调用WebService方法;

var callObject = ws.SAVEWORKFLOWXML(_parent.workflowxml,_global.workxml.toString());

//设置返回结果对象;

callObject.onResult = function(result){

    trace(result);

 

}

//如果调用错误返回信息(这个是可选的)

callObject.onFault = function(fault){

    trace("fault:"+fault.faultstring);

}

 

4 java 代理中调用webservice,首先在代理工程中引入相关的包

 

 

 

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> import  lotus.domino. * ;

import  java.io. * ;

import  java.util. * ;

import  java.net. * ;

import  org.w3c.dom. * ;

import  org.apache.soap.util.xml. * ;

import  org.apache.soap. * ;

import  org.apache.soap.encoding. * ;

import  org.apache.soap.encoding.soapenc. * ;

import  org.apache.soap.rpc. * ;

import  org.apache.soap.transport.http.SOAPHTTPConnection;

public   class  JavaAgent  extends  AgentBase {

    
public   void  NotesMain() {

        
try  {

            Session session 
=  getSession();

AgentContext agentContext 
=  session.getAgentContext();

Document doc 
=  agentContext.getDocumentContext();

String xmlfilename
= doc.getItemValueString( " xmlfilename " )

String xmltext
= doc.getItemValueString( " xmltext " )

            
//  (Your code goes here) 

        URL url 
=   new  URL ( " http://server/mis/flow.nsf/saveworkflow?WSDL " );

     SOAPMappingRegistry smr 
=   new  SOAPMappingRegistry ();

     StringDeserializer sd 
=   new  StringDeserializer ();

     smr.mapTypes (Constants.NS_URI_SOAP_ENC, 
new  QName ( "" " Result " ),  null null , sd);

     
//  创建传输路径和参数

     SOAPHTTPConnection st 
=   new  SOAPHTTPConnection();

     
//  创建调用

      Call call 
=   new  Call ();

     call.setSOAPTransport(st);

     call.setSOAPMappingRegistry (smr);

     call.setTargetObjectURI (
" http://tempuri.org/message/ " );

     call.setMethodName(
" saveworkflowxml " );

     call.setEncodingStyleURI (
" http://schemas.xmlsoap.org/soap/encoding/ " );

     Vector params 
=   new  Vector();

    params.addElement(
new  Parameter( " xmlfilename " , String. class , xmlfilename,  null ));

 params.addElement(
new  Parameter( " xmltext " , String. class ,xmltext,  null ));

     call.setParams(params);

     Response resp 
=   null ;

     
try  {

       resp 
=  call.invoke (url, "" );

     }

     
catch  (SOAPException e) {

     System.err.println(
" Caught SOAPException ( "   +  e.getFaultCode ()  +   " ):  "   +  e.getMessage ());

     
return ;

     }

     
//  检查返回值

     
if  (resp  !=   null   &&   ! resp.generatedFault()) {

     Parameter ret 
=  resp.getReturnValue();

     Object value 
=  ret.getValue();

     System.out.println (
" Answer-->  "   +  value);

     }

     
else  {

         Fault fault 
=  resp.getFault ();

         System.err.println (
" Generated fault:  " );

         System.out.println (
"  Fault Code =  "   +  fault.getFaultCode());

         System.out.println (
"  Fault String =  "   +  fault.getFaultString());

     }

        } 
catch (Exception e) {

            e.printStackTrace();

        }

    }
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->  1  %INCLUDE  " lsxsd.lss "
 2 
 3  Class saveworkflow
 4 
 5       Sub   NEW     
 6 
 7       End Sub
 8 
 9       Function  saveworkflowxml(xmlfilename  As   String ,xmltext  As   String As   String
10 
11           On   Error   Goto  errhandle
12 
13           Dim  outputStream  As  NotesStream
14 
15           Dim  session  As   New  NotesSession
16 
17           Set  outputStream  =  session.CreateStream
18 
19           Dim  outputFile  As   String
20 
21          outputFile = Curdir$() + " datadominohtmlworkflow " + xmlfilename
22 
23           If  outputStream.Open(outputFile)  Then
24 
25               Call  outputStream.WriteText(xmltext, EOL_CRLF)
26 
27               Call  outputStream.Close
28 
29           End   If
30 
31          saveworkflowxml = " 1 "
32 
33           Exit   Function
34 
35  errhandle: 
36 
37           Msgbox  Str(Err) + " 行号: " + Str(Erl) + " 错误信息saveworkflow:saveworkflowxml " + Error $    
38 
39           Resume   Next  
40 
41       End Function
42 
43  End  Class
44 

 

原文链接:http://blog.csdn.net/juest365/article/details/6285383

猜你喜欢

转载自openhardware.iteye.com/blog/1561473