基于 JAX-RS 机制扩展

发送反馈


SuperMap iServer 不仅提供了 REST 服务,将大量 GIS 功能以资源的形式发布出来,而且提供了一套扩展机制,使用户能够方便地将自己的应用添加至 SuperMap iServer 服务器上,实现自定义的资源,从而成为 REST 服务的一部分。

SuperMap iServer 目前有两种方式提供 REST 服务,即基于 Restlet 机制和基于 JAX-RS 机制,进行扩展时,要根据功能模块的实现方式采用不同的扩展方法。

基于 JAX-RS 机制实现 REST 资源的模块有:空间分析模块。

SuperMap iServer 提供了 JAX-RS 框架(参见:JAX-RS 简介)下的资源扩展机制,用于 REST 服务的扩展:
  1. 提供了资源基类:JaxrsResourceBase、JaxAlgorithResultSetResource<T>,供用户扩展,基于此实现新的资源
  2. SuperMap iServer 提供了 xml、json、rjson 几种表述格式。基于资源基类创建的资源默认具备这几种表述能力。
  3. 提供了@Template 注记,并提供了一系列 FreeMarker 变量,供用户自定义*.ftl 模板,并配置到资源,从而使资源支持 html 表述格式。
  4. 提供 JSON 参数解析器,基于资源基类创建的资源默认识别类型为 JSON 的请求体格式。
  5. 提供服务接口上下文(InterfaceContext),基于资源基类创建的资源可通过 InterfaceContext 获取服务组件及其他信息。
  6. 领域功能与 SuperMap iServer 三层体系结构的紧密结合,可与现有 GIS 功能结合创建领域资源。

基于 JAX-RS 机制的功能模块(空间分析模块)主要扩展点包括:

以上扩展点的扩展流程如下:

  1. 代码实现。

新资源基于 com.supermap.services.rest.resources.JaxAlgorithResultSetResource 或 com.supermap.services.rest.resources.JaxrsResourceBase 实现;

表述生成器基于 javax.ws.rs.ext.MessageBodyWriter 实现;

参数解析器基于 javax.ws.rs.ext.MessageBodyReader 实现。

  1. 配置。

这里以扩展新的表述生成器 FakeKMLEncoder 、扩展新的参数解析器 FakeJsonDecoder 、扩展新资源 myBuffer 为例进行了介绍,源码可在以下位置获取:%SuperMap iServer_HOME%\samples\code\ExtendExist_JSR,作为一个整体的工程文件,用户只需把工程导入并编译后导出为 JAR 包(参见:extendexist_jsr.jar),然后放在 %SuperMap iServer_HOME%\webapps\iserver\WEB-INF\lib 下,重启 iServer 即可完成部署。