Domino8.5中WebService接口实现

hhs2012

贡献于2012-06-27

字数:6217 关键词: WEB服务/RPC/SOA

云南软通信息科技有限公司 Domino8.5中Web Service接口实现 在domino中提供Web Service的接口,创建Web Service的方法: 在domino8.5中,Web Service分为提供者和使用者如图所示 这个Web Service是通过调用者提供的用户名返回该用户的邮箱的URL地址这么一个简单的功能。 1. 点击 Web Service提供者,点击新建 Web Service提供者,在新建面板中输入名称(该 Web Service的名字),选择类型(可以是Java,也可以是lotus Script,这里我先选择用Java,后面将附上用lotus Script的代码)点击确定。 编辑代码如下: import lotus.domino.Database; import lotus.domino.Document; import lotus.domino.Session; import lotus.domino.View; import lotus.domino.WebServiceBase; public class GetUserMailURL{ Session session; 云南软通信息科技有限公司 public GetUserMailURL(){ session = WebServiceBase.getCurrentSession(); } public String getMailUrl(String name){ String url=""; try{ Database db=session.getDatabase("","names.nsf"); View view=db.getView("People"); View serverv=db.getView("($Servers)"); Document doc=view.getDocumentByKey(name); url=url+"http://"; String server=doc.getItemValueString("MailServer"); Document serverdoc=serverv.getDocumentByKey(server); String serveruri=serverdoc.getItemValueString("NetAddresses"); url=url+serveruri; String mailFile=doc.getItemValueString("MailFile"); mailFile=mailFile.replace('\\', '/'); if(mailFile.indexOf(".nsf")<0){ mailFile=mailFile+".nsf"; } url=url+"/"+mailFile; }catch(Exception e){ e.printStackTrace(); } return url; } } 注:使用WebServiceBase来生成session,其他的和普通的Java程序一样。 2. 编辑 web service属性,在基本选项卡中,将端口类类型设置为我们刚刚创建的这个类。 在高级选项卡中将SOAP消息格式设置为RPC/编码的,其他的设置在编译后会自动生成。这样我们的web Service就创建好了,我们可以在浏览器中输入地址进行测试: 云南软通信息科技有限公司 http://server/nsfpath/getUserMail?openWebService 看到这个界面说明我们已经发布成功,点击wsdl或者更改地址为:http://server/nsfpath/getUserMail?wsdl 可以看到生成的WSDL文件。 这里需要注意的问题:Domino是有权限访问控制的,如果给其他系统提供该Web Service,你需要考虑是让其他服务以某个特定用户登录访问还是将你的服务设置成未登录也可以访问。 lotusScript的实现如下: Dim session As NotesSession Dim db As NotesDatabase Dim vpeople As notesview Dim vserver As notesview Dim dserver As NotesDocument Dim duser As NotesDocument Dim servername As String Dim serverurl As String Dim mailfile As String Dim url As String Class GetMailUrl Sub NEW Set session = New NotesSession End Sub Function getUserMail(user As String) As String Set db=session.getdatabase("","names.nsf",False) Set vpeople=db.GetView("People") Set vserver=db.GetView("($Servers)") Set duser=vpeople.GetDocumentByKey(user) servername=duser.GetItemValue("MailServer")(0) Set dserver=vserver.GetDocumentByKey(servername) serverurl=dserver.GetItemValue("NetAddresses")(0) 云南软通信息科技有限公司 mailfile=duser.GetItemValue("MailFile")(0) If Instr(mailfile,".nsf")<1 Then mailfile=mailfile+".nsf" End If url="http://"+serverurl+"/"+mailfile+"?open" getUserMail=url End Function End Class 配置与java的配置方法一样。 3.在domino中调用webservice 在domino中调用webservice的原理主要是: l 使用axis2生成java代码。 l 在数据库的script库中添加生成的java代码。 l 在数据库的代理中调用script的库。 l 在代理中对需要操作的表单进行操作。 l 在表单中添加代理。 l 或者直接用httpclient来发送xml,然后接收xml,解析xml l 使用axis2生成java代码 l 在axis2生成代码的时候需要选择同步模式。 添加生成的java代码 新建lotusscript库 数据库的共享代码下面javat 点击编辑项目 云南软通信息科技有限公司 找到根目录,添加生成的java文件。 在编译之前需要将用到的类库拷贝到lotus目录下面的jvm\lib\ext目录下面。 同时服务器上也需要拷贝到domino的jvm\lib\ext目录下面。 添加后就可以编译项目。 添加代理 在数据库的共享代码下面新建一个代理javaagent1。 云南软通信息科技有限公司 点击编辑项目添加script库。 云南软通信息科技有限公司 编写java代码。 import lotus.domino.*; import cn.com.tsingtao.logistics.service.*; public class JavaAgent extends AgentBase { public void NotesMain() { try { Session session = getSession(); AgentContext agentContext = session.getAgentContext(); // (Your code goes here) TestServiceTest t=new TestServiceTest(); java.lang.String name=t.testhello(); Agent agent = agentContext.getCurrentAgent(); Database currentDB = agentContext.getCurrentDatabase(); Document docContext = agentContext.getDocumentContext(); //修改当前文档的域的值 docContext.replaceItemValue("Form", "abc"); docContext.replaceItemValue("name", name); docContext.save(true,true); } catch(Exception e) { e.printStackTrace(); } } } 在表单中引用 云南软通信息科技有限公司 点击添加操作 直接用java进行webservice操作 在代理中直接通过httpclient来与webservice交互。 import lotus.domino.*; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.methods.InputStreamRequestEntity; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; import java.io.ByteArrayInputStream; 云南软通信息科技有限公司 import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class JavaAgent extends AgentBase { public void NotesMain() { try { Session session = getSession(); AgentContext agentContext = session.getAgentContext(); // (Your code goes here) Agent agent = agentContext.getCurrentAgent(); Database currentDB = agentContext.getCurrentDatabase(); Document docContext = agentContext.getDocumentContext(); //docContext.replaceItemValue("Form", "abc"); java.lang.String n=docContext.getItemValueString("name"); java.lang.String name=getName(getXmlString(n)); docContext.replaceItemValue("name", name); docContext.save(true); } catch(Exception e) { e.printStackTrace(); } } //获取返回的xml文件 public String getXmlString(String name) throws Exception { String soapRequestData ="" +"" +" " +" " +" "+name+"" +" 12" +" " +"" +""; 云南软通信息科技有限公司 HttpClient client = new HttpClient(); UsernamePasswordCredentials upc = new UsernamePasswordCredentials("wsuser", "wsuserwsuser"); client.getState().setCredentials(null, null, upc); //get.setDoAuthentication(true); client.getParams().setAuthenticationPreemptive(true); //Credentials defaultcreds = new UsernamePasswordCredentials("wsuser", "wsuserwsuser"); //client.getState().setCredentials(new AuthScope("http://localhost:7001/BSM/test", 7001, AuthScope.ANY_REALM), defaultcreds); PostMethod postMethod = new PostMethod("http://localhost:7001/BSM/test"); postMethod.setDoAuthentication(true); byte[] b = soapRequestData.getBytes("utf-8"); InputStream is = new ByteArrayInputStream(b,0,b.length); RequestEntity re = new InputStreamRequestEntity(is,b.length,"application/soap+xml; charset=utf-8"); postMethod.setRequestEntity(re); int statusCode = client.executeMethod(postMethod); System.out.print(statusCode); soapRequestData = postMethod.getResponseBodyAsString(); return soapRequestData; } //解析xml文件 public String getName(String xml)throws Exception { org.dom4j.Document doc = DocumentHelper.parseText(xml); Element root=doc.getRootElement(); List els= root.elements(); els=((Element)els.get(1)).elements(); els=((Element)els.get(0)).elements(); els=((Element)els.get(0)).elements(); String name=""; for(int i=0;i

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ]
13 人已下载

下载文档

相关文档