`

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 附签上的字段说明如下:

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"), nullnull, 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 StringAs 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

分享到:
评论

相关推荐

    domino中运用webservice

    标题"domino中运用webservice"所指的就是在Domino环境中如何利用WebService技术。这通常涉及到以下几个关键知识点: 1. **WebService的基本概念**:WebService是一种基于XML的开放网络协议,它通过SOAP消息协议在...

    Domino的WebService服务

    在本文中,我们将深入探讨Domino如何实现和利用WebService服务,以及这一功能的重要性和实际应用。 1. WebService简介: WebService是一种基于开放标准(如WSDL、SOAP和UDDI)的互联网通信协议,允许不同应用程序...

    java webservice flash在domino中的使用

    Java Web服务(Webservice)与Flash技术在IBM Lotus Domino环境中的整合是一个复杂而有趣的主题,它涉及了多种技术的交互。让我们深入探讨一下这个话题。 首先,Java Web服务是一种通过HTTP协议提供和消费的标准化...

    在Lotus Domino 中应用webservice

    ### 在Lotus Domino中应用Webservice 随着信息技术的不断发展,企业间的数据交换需求日益增加,Webservice作为一种标准的跨平台通信协议,在不同系统的集成中扮演着重要的角色。Lotus Domino作为一个成熟的企业级...

    lotus domino webservice建立和调用

    这个技术使得开发者能够利用Lotus Domino的强大功能,如数据库存储、邮件和协作,集成到Web应用程序或企业系统中。在本篇文章中,我们将深入探讨如何建立和调用Lotus Domino Web服务。 首先,建立Lotus Domino Web...

    Lotus_Domino webservice

    【Lotus_Domino webservice】是指在Lotus Domino平台上集成和使用Web服务的技术。 Lotus Domino V7.0版本开始,引入了Web服务设计元素,极大地简化了在Lotus Domino应用中开发和使用Web服务的过程。 在Lotus Domino...

    Domino R8+版本编写及调用webservice样例库

    综上所述,"Domino R8+版本编写及调用webservice样例库"是一个关于如何在IBM Lotus Domino R8或其后续版本中创建和使用Web服务的教程或实践资源,涵盖了Web服务的创建、WSDL的使用、SOAP通信、调用服务的示例代码...

    DOMINO webservice打包工具

    DOMINO webservice打包工具,基本DOMINO平台 开放设计

    Domino_webservice应用技巧.docx

    在IT领域,尤其是在企业级应用开发中,Domino Webservice是一种将Lotus Domino系统与外部应用程序集成的重要技术。本文主要介绍了如何在Domino环境中创建和应用Webservice,以及调用外部Webservice的基本步骤。 ###...

    Domino_webservice应用技巧.pdf

    综上所述,Domino Webservice是Lotus Domino平台中实现跨系统数据交换的重要手段,通过简单的步骤,开发者可以构建和调用Webservice,实现应用程序间的通信。同时,Domino提供的工具和内置支持使得这一过程更为简便...

    在Domino中创建一个二维码转换的WebService应用

    在 Domino 中创建一个二维码转换的 WebService 应用是一个实用的技术实践,可以帮助用户方便地将文本信息转换为可扫描的二维码图像。以下是基于 dBarcodeQR.jar 开发包的详细步骤和知识点: 1. **二维码的基本概念*...

    WebService 添加头部验证信息

    在Java中,我们可以继承`javax.xml.soap.SOAPHeaderElement`或使用JAX-WS的`@WebServiceClient`注解来自定义消息处理器。 ```java public class TokenSoapHeader extends SOAPHeaderElement { private String ...

    webService添加basic验证

    1. **定位到`servlet`元素**:找到`web.xml`文件中与你的WebService相关的`servlet`元素。例如,在示例中,`&lt;servlet-name&gt;`为`AxisServlet`。 2. **添加安全约束**:在`web.xml`中增加`&lt;security-constraint&gt;`...

    AJAX在DOMINO中应用

    通过分析和实践"ajax进度条示例.nsf"和"ajax数形菜单.nsf"这两个示例,可以更好地理解AJAX在实际项目中的运用。 总结,AJAX在DOMINO中的应用为Web应用程序带来了丰富的交互性和实时性,极大地提升了DOMINO应用的...

    Domino中的限制(精华)

    ### Domino中的限制(精华) #### 一、数据库的最大大小是多少? 在Domino平台中,数据库的最大大小受到操作系统级别的文件大小限制。具体来说,最大的OS文件大小限制为64GB。这意味着一个Domino数据库的大小不能...

    domino公式大全,中文说明,最快速理解domino公式功能,domino公式中文介绍

    【DOMINO公式大全中文说明】:...以上是DOMINO公式大全中的一些关键函数和其用途,了解并熟练运用这些公式,可以极大地提高DOMINO应用的开发效率和功能实现。在实际开发中,可以根据需求选择合适的公式进行组合和应用。

    Domino中使用Servlet

    在本文中,我们将深入探讨如何在Domino环境中使用Servlet,这是一种强大的Java技术,用于构建Web应用程序。Servlet提供了一种服务器端编程模型,可以在不重启服务器的情况下处理HTTP请求,提高了性能和效率。 首先...

    Dominoweb开发与管理中文PPT版

    早期的客户机与服务器软件都被命名为Notes,1995年,web功能被添加到了服务器软件中,Lotus公司降这种与互联网紧密结合的全新服务器软件更名为Domino,并一直沿用至今。从此浏 资源太大,传百度网盘了,链接在附件中...

    domino中的代理

    在Lotus Domino中,代理是一种强大的工具,用于自动化工作流程、处理数据和响应用户请求。标题提到的"domino中的代理"主要涉及LotusScript编写的两种类型:Web代理和Notes代理。这两种代理在许多方面有共同之处,但...

Global site tag (gtag.js) - Google Analytics