浅论Web Service技术在实际系统开发中的应用

2011-12-31 00:00:00余方涛
电脑知识与技术 2011年25期


  摘要:随着公司的应用系统的日益增加,应用系统之间的应用数据和控制数据交互也随之日益频繁,为解决各应用系统之间出现的信息孤岛问题,该文提出了Web Service解决方案,然后依据实例介绍怎样利用Web Service技术实现不同应用系统的信息交互。
  关键词:Web Service
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)25-6108-03
  Web Service是利用SOAP(简单对象访问协议,Simple Object Access Protocol)在HTTP上执行远程方法调用的一种方法。SOAP技术基于XML的标准,它详细描述了怎样在HTTP上以可重复的方式进行方法调用。和传统的离线文件导入和中间表集成方式相比,采用Web Services方式具有以下优势:
  实时性好,在合同系统中调用Web服务的归档方法,可以实时将数据转入到档案系统的文件库中。
  通用和扩展性好,双方系统的耦合度低,一方的需求和系统变动不会带来另一方开发工作量的增加,Web服务方式可实现系统数据的双向传递。
  安全性好,双方只需沟通传递的数据内容和格式,均不需要了解对方的数据库地址、表结构,不会对对方数据造成潜在危险。
  在我公司的portal系统、OA、图书管理系统、合同管理系统等系统中都获多获少的需要集成,这样就需要在各系统之间做集成接口,利用Web Services技术(如图书管理系统与合同管理系统的接口集成)可以比其他技术更加能重复使用,也更加智能化!本文主要以图书管理系统与合同管理系统的接口集成为例,论述用java 开发Web Services接口中存在的技术问题。
  1 问题提出
  档案系统作为服务提供者,发布Web Service服务;合同管理系统作为服务请求者,请求服务。
  1.1 需要实现接口的如下功能
  客户端(合同管理系统):
  1)取得服务端的服务描述文件WSDL,解析该文件的内容,了解服务端的服务信息,以及调用方式。
  2)根据需要,生成恰当的SOAP请求消息(指定调用的方法,已经调用的参数),发往服务端。
  3)请求发送前,根据验证的Schema文件进行数据格式的验证。
  4)等待服务端返回的SOAP回应消息,解析得到返回值。
  服务端(档案系统):
  1)编写服务函数代码,生成服务描述(WSDL)文件,以供客户端获取。
  2)编写传递的XML基础数据集的格式规范,提供示例XML数据范本;编写针对该XML数据集进行验证的Schema文件,用于客户端发送前和服务器端接收后进行验证格式。
  3)接收客户端发来的SOAP请求消息,解析其中的方法调用和参数格式。
  4)根据WSDL和WSML的描述,调用相应的对象来完成数据的插入功能。
  5)把返回值(成功、失败)放入SOAP回应消息返回给客户端。
  6)将调用写入系统日志。
  示意图如图1。
  1.2 合同信息归档过程
  在合同管理系统中,将合同信息通过接口自动将数据实时归档到档案系统中。合同管理系统向档案系统归档的内容包括合同的正文信息和电子附件信息,通过两个步骤来实现,如下图所示,第一步是将电子附件上传到档案FTP全文服务器的指定路径下,第二步是正文信息和附件的条目信息构成规范的xml格式,调用接口的相应方法,将条目信息写入到档案系统中。归档完成后,在档案系统中可以查看文件的条目信息及打开/下载关联的电子附件。
  1.3 合同信息归档范围
  文件的相关属性信息包括:合同编号、合同名称、标的额、签订日期、承办单位、项目来源(项目类别)等。物理文件的相关信息包括文档附件(例如Word、PDF文档等)大小等。
  2 归档处理过程方法
  2.1 电子附件的物理归档
  对于实际的电子文件附件,合同管理系统通过接口获取档案系统的全文服务器配置,将电子附件首先上传到档案的全文服务器的临时目录下。
  2.2 正文条目信息的归档
  在合同管理系统中,自动获取各个需要归档的文档相关信息和电子附件相关信息,生成规定格式的XML文件,传递至接口,接口将这些数据自动写入到档案系统数据库中。
  传递的XML文件示例如图3。
  其中,在合同系统中所形成的XML格式必须与上图所示相同,也就是说,上图中红色与兰色字体部分必须完全一样(包括大小写),黑色字体代表具体的数据。
  2.3 系统调用Web Service
  待档案系统发布Web Service后,可以通过IE地址栏,直接访问Web Service并调用其中的方法,下面对方法调用及返回结果加以说明。
  对于合同管理系统会开放两个方法如图4所示。
  方法1: GetContractFtpConfig方法会返回FTP配置信息,返回结果也是一个XML格式的文件,合同管理系统可以通过解析这个XML信息,获取FTP服务器的IP地址、路径、用户名和密码,通过这些信息就可以将附件上传到指定FTP目录下。
  方法2:ContractToArchive方法,需要一个XML格式的字符串参数,调用结果可能有成功、失败、XML格式不正确等三种情况,返回结果“-3”:失败,表示xml数据不规范;返回结果“-1”:失败,表示数据处理失败;返回结果“0”:成功。这三种情况表示了合同管理系统在调用Web Service的ContractToArchive的返回结果,只有在 中的值为0时,才表示归档成功,否则不成功。
  3 实现
  在客户端合同系统这面,应主要实现XML文档、XML文档上传、FTP配置获取、FTP上传等功能。下面给出其代码片断。
  3.1 XML文件生成
  org.dom4j.Document doc=org.dom4j.DocumentHelper.createDocument();
  org.dom4j.Element eltRoot=DocumentHelper.createElement("Documents");
  doc.setRootElement(eltRoot);
  org.dom4j.Element eltDocument=eltRoot.addElement("Document");
  org.dom4j.Element eltAttribute=eltDocument.addElement("Attribute");
  org.dom4j.Element newhtbh=eltAttribute.addElement("htbh"); /*合同编号*/
  org.dom4j.Element newhtmc=eltAttribute.addElement("htmc"); /*合同名称*/
  org.dom4j.Element newbde=eltAttribute.addElement("bde");/*标的*/
  org.dom4j.Element newqdrq=eltAttribute.addElement("qdrq"); /*签订日期*/
  org.dom4j.Element newcbdw=eltAttribute.addElement("cbdw"); /*承办单位*/
  org.dom4j.Element newxmlb=eltAttribute.addElement("xmlb"); /*项目类别*/
  
  //以下用合同中的相关数值填充已填入的值
  // 省略……
  //生成 files nodelist
  org.dom4j.Element eltFiles=eltDocument.addElement("Files");
  // 省略……
  3.2 XML上传到档案系统
  ImpToArchive test = new ImpToArchive();
  ImpToArchiveSoap impToArchiveSoap = test.getImpToArchiveSoap();
  res=impToArchiveSoap.contractToArchive(xmlFragment);
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = dbf.newDocumentBuilder();
  Document doc = db.parse(new InputSource(new StringReader(res)));
  NodeList nl = doc.getElementsByTagName("returnValue");
  returnValue = new Integer(nl.item(0).getFirstChild().getNodeValue()).intValue();
  3.3 FTP登陆配置获取
  ImpToArchive test = new ImpToArchive();
  ImpToArchiveSoap impToArchiveSoap = test.getImpToArchiveSoap();
  ftpConfig=impToArchiveSoap.getContractFtpConfig();
  3.4 附件上传
  public FileData upload(String localFileFullN