《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > J2EE环境下WebServices框架的实现

J2EE环境下WebServices框架的实现

2009-01-08
作者:谢飞

1.框架背景 

    J2EE是跨平台的,而WebServices的核心XML也是跨平台的,因此两者结合更能发挥它们各自的功效。关于WebServices的概念、作用、实现等,本文不作详细的介绍,背景部分主要介绍一下在J2EE环境下实现WebServices框架所需要的环境。 

(1)Tomcat 

    本框架使用的Web服务器为Tomcat4.x,具体下载地址:http://jakarta.apache.org。遵循J2EE1.3规范,包括JSP1.2和Servlet2.3。由于Axis是以Web应用的形式发布的,所以需要一个Web服务器。 

(2)Axis 

    Axis框架来自 Apache 开放源代码组织,它是基于JAVA语言的最新的 SOAP 规范(SOAP 1.2)和 SOAP with Attachments 规范(来自 Apache Group )的开放源代码实现。Axis的最新版本是1.1,可以从http://ws.apache.org/axis/index.html下载。 

(3)JAXB 

    JAXB是一个数据绑定工具,相关资料和下载可以到java.sun.com/webservices/,JAXB主要可以实现:把 XML 数据转化成 Java 类(或者多个类);把 Java 数据转化成 XML 文档。使用 JAXB 时需要一个 XML Schema 以生成类和数据结构。 

2.框架目标 

    本框架主要目的是使开发WebServices应用变得简单、高效,使WebServices应用易于扩展和维护。具体来讲,包括以下几方面: 

(1)提供给用户的WebServices接口简单,提供单点入口,这样用户不需要记住很多繁琐的方法。 

(2)WebServices的服务端和客户端的数据全部通过XML交互,目前很多行业都形成了XML规范,例如旅游电子商务,如果严格按照XML规范,可以达到各个系统之间的整合。 

(3)WebService的调用通过XML事件实现。一个XML文档就是一个WebServices事件,激发一个系统后台的调用。 

(4)维护WebServices方便,例如方便的添加、修改、删除一个WebServices提供的功能。 

(5)方便测试WebServices提供的功能,可以在脱离WebServices的环境下测试。 

3.框架实现原理 

    一个WebServices访问大致流程为:首先互联网用户向WebServices客户端服务器发出某请求,然后客户端服务器发送一个XML事件到WebServices服务器,WebServices服务器解析XML事件,调用相应的后台业务逻辑,并将结果以XML的形式返回给客户端。本框架是用于基于Servlet的WebServices,主要任务就是解析XML事件,调用相应的业务逻辑,然后将结果以XML的格式反馈给客户方,其中还包括了错误处理。具体的流程图如下:

①  WebServices客户端首先根据用户的请求封装XML,然后发送到WebServices服务器端。其中的XML文档必须符合WebServices服务器端定义的Schema,一个不同的XML文档对应一个不同的请求。其中XML最好能遵循行业规范,例如旅游电子商务XML规范,有利于和其他系统交互。

②  WebServices服务器端的Servlet服务程序为WebServicesEngine,提供唯一的访问入口doService(),所有的客户端都是访问WebServicesEngine的doService()方法。当服务器端接收到一个XML事件请求,首先解析这个XML(可以通过JAXB或者castor),然后调用相应的系统Action,Action的主要任务为获取XML中的数据。

③  Action将XML数据封装成系统的Model,然后调用WebServices的业务代理层。

④  WebServices的业务代理层调用后台应用服务器的EJB。

⑤  后台执行完后,将结果返回给WebServices的业务代理层。

⑥  WebServices的业务代理层将结果返回给Action。

⑦  Action再将具体的结果封装成XML返回给WebServicesEngine。

⑧  最后WebServicesEngine将XML返回到WebServices客户端。

    具体的XML请求和Action的对应关系在一个request.xml中定义,对于客户端来说,一个XML文档就是一个功能请求,对于WebServices开发者来说,一个Action就是一个提供给外界的功能,两者的关系由request.xml决定。其中这个request.xml具体由WebServicesEngine解析。

4.框架具体实现 

(1)  将XML Schema转化为java程序。

    首先需要安装jaxb,然后执行命令:xjc.bat -p com.webservice.jaxbmodel WebService.xsd -d src,即可在src目录下生成java程序,然后编译。

(2)  解析XML请求,然后选择相应的Action执行请求

    首先定义request.xml文件,格式如下:

       com.webservice.jaxbmodel.CreateOrderRequest

        com.webservice.action.CreateOrderAction

其中CreateOrderRequest是由JAXB从XML Schema生成出来的类,当XML请求到达,首先通过JAXB把XML文档unmarshal成java对象,例如CreateOrderRequest,然后通过反射机制查找到类CreateOrderAction,然后实例化,然后执行Action的execute方法调用后台具体的业务逻辑。为了提高效率,可以把Action设置成单例,类似于Struts(jakarta.apache.org)的Action,其中Action只做流程控制。

(3)  错误处理

    考虑到WeServices客户端的多样性,例如.NET、VB、Delphi等,有些语言并没提供类似于java的例外(Exception)处理,因此本框架并未使用例外机制,而用一个专用的XML文档表示错误信息,其中有一个ErrorCode来表示具体的错误信息。格式如下:

        500

    如果返回给客户端的XML为错误文档,则可以根据ErrorCode查询到具体的错误信息。具体ErrorCode的错误信息由WebServices提供者提供。

(4)  返回XML结果

    WebServices客户端接收到XML文档后,需要首先解析此XML是否为错误XML文档,如果是,则将错误的信息显示给用户,否则,解析XML文档,将XML数据反馈给最终用户。

5.框架展望和小结 

    本框架的主要目的就是加快用户开发WebServices的速度,如果对已有系统开发WebServices,则只需要首先制定一些XML规范(Schema),然后编写相应的Action,Action去调用现有的业务逻辑,而不用去关心WebServices的具体细节,如此一来,可以大大的提高效率。

    当然,此框架还有很多未考虑的因素,例如WebServices安全等,因此有待进一步改善。

参考资料

1.http://java.sun.com/webservices/

2.http://ws.apache.org/axis/index.html

3.IBM developerWorks中文网站

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。