1、在 EOS6.1 上快速 Web Service一、 概述EOS6.1 的一个主要的功能就是快速开发符合 wsdl1.1 标准的 WebService,相对于EOS6.0GA 版,该功能有了明显的改善。现以通过开发的流程带领大家快速入门,其中列举一些在开发过程中需要注意的问题,方便大家在实际项目中快速使用 EOS6.1 开发出高质量的 Web Service。二、 构件的开发在 EOS6 或更高版本中,WebService 的开发有两种方式,即自顶向下与自底向上的开发方式。自顶向下方式指的是通过 WSDL 生成逻辑构件实现或 Java 实现,这种方式前提是需要进行服务定义。自底向上的方式指的是
2、先创建逻辑构件与 Java 构件实现,然后再装配为 WebService。两种方式各有优劣,在实际项目中可以根据具体情况进行选择。本节主要是介绍一下自底向上的方式开发 WebService。在 EOS6 版本中构件实现主要有两种类型,即逻辑构件与 Java 构件。A、逻辑构件的创建:新建 EOS 项目或在已有项目下新建构件包 A,在构件包 A 的构件节点下创建逻辑构件,并在创建好的逻辑构件下新建一个或多个逻辑流。B、Java 构件的创建:新建 EOS 项目或在已有项目下新建构件包 A,在构件包 A 的运算节点下的Java子节点下新建 Java 类。注:1、 通常开发的 Java 构件需要添加S
3、ervice 与Remotable 标注,如果使用了Service 指定了服务接口,那么该接口必须加上Remotable 标注,否则无法装配为 Web Service;2、 EOS6.1 发布的 Web Service 生产的 WSDL 规格定义是 document/literal wrapped风格,所以 Java 构件内的方法不允许重载。三、 构件的装配Web Service 服务是通过构件的装配实现的,装配的方式有两种:第一、 通过构件上的右键菜单封装为 Web Service向导完成,此方式比较简单,推荐使用。第二、 先在构件包的构件装配节点下新建组合构建,再将构建拖拽到组合构建装配图
4、中,然后再进行 Web Service 的绑定即可。服务装配过程都比较简单,但如果构件中含有比较复杂的 JavaBean、集合、Map或 DataObject 类型的参数,在装配的时候需要进行 JavaBean 或服务的 aegis 配置。JavaBean 的 aegis 配置:一般是 JavaBean 中含有复杂类型属性时才需要配置,如集合类型与 Map 类型。JavaBean 的 aegis 配置文件名必须为JavaBean 类名.aegis.xml ,这可以在服务封装为 Web Service 的向导过程中配置,也可以通过 JavaBean 的源文件右键菜单Java Bean 的 aeg
5、is 配置创建,格式如下:如定义一个 JavaBean 类 com.exampl.UserBeanpublic class UserBean implements Serializableprivate String userName;private Map map;private List list;public List getList() return list;public void setList(List list) this.list = list;public class Address implements Serializable private int id;privat
6、e String address;private String postcode;public String getAddress() return address;public void setAddress(String address) this.address = address;那么 UserBean 的 aegis 配置即是:UserBean.aegis.xml。Web Service 的 aegis 配置:服务的参数只有为集合、Map 或 DataObject 类型的情况才需要进行服务的aegis 配置。服务的 aegis 配置的创建方式与 JavaBean 类似,可以在封装为
7、Web Service的向导过程中进行,也可以通过构件包下的配置节点右键菜单的”创建-服务的aegis 配置 ”完成。如果新开发的服务为名称为 componentService,那么服务的 aegis 配置为componentService.aegis。A、 如果服务的输入输出参数为 List,List 里面存放的数据类型为com.example.UserBean,那么配置 componentService.aegis 内容为:注:1、 type 与 componentType 的类型都是全路径名;2、 List 里面存放的是单一的数据类型,不能是不同类型的数据;3、 Index 属性表示参数
8、序列,输入参数是由 0 开始的整数(0,1) ,输出参数为-1 开始的整数 (-1,-2)。B、 如果服务的输入输出参数为 Map,Map 里面存放的 Value 值类型为com.example.UserBean,Key 值类型为 String,那么配置componentService.aegis 内容为:注:1、 keyType 对应的类型也为全路径,其它属性说明同上;2、 map 里的 key 与 value 值类型只能是单一类型。C、 如果服务的输入输出参数为 DataObject,DataObject 对应的名称空间为http:/com.example,类型为 User,那么配置com
9、ponentService.aegis 内容为:注:组合构件中的服务不指定接口描述也可装配为 Web Service。四、 服务的部署服务开发好后使用 EOS Studio 的导出功能,导出构件包并通过 EOS Governor 部署,如果是开发环境,则直接通过 Sutdio 的部署功能部署到 Server 上即可。注:如果想知道哪些服务部署成功,可以使用 EOS6 提供的获取服务列表方法ServiceStatistics.getWebServiceURL()获取所有发布成功的服务。五、 服务的调用服务部署成功后,可以通过?wsdl 的方式访问到部署成功的服务定义。如果服务在装配图 promo
10、te 出来的服务名为 componentService,服务部署的应用为 eos-default,那么可以通过 http:/IP:port/eos-default/componentService?wsdl 访问到服务componentService 的 wsdl 接口描述。获取到 WSDL 后,则可以使用各种客户端进行服务调用,包括 Axis、XFire、CXF与 EOS6 本身等。这里使用 Axis2 的 wsdl2java 工具生成服务的客户端调用代码对服务进行调用。首先,使用 Axis2 的 wsdl2java 工具生产服务调用客户端,使用 CMD 命令:wsdl2java.bat p pkgname uri http:/IP:port/eos-default/componentService?wsdl 生成客户端;然后创建客户端对象执行相关服务操作即可。六、 总结使用 EOS6.1 开发 Web Service 方便快捷,也容易上手。对于服务参数类型的支持是有条件的,这个需要大家在开发中查看 EOS6.1 的相关文档。