作者:MR.
SuperMap iServer 不仅提供了 REST 服务,将大量 GIS 功能以资源的形式发布出来,而且提供了一套扩展机制,使用户能够方便地将自己的应用添加至 SuperMap iServer 服务器上,实现自定义的资源,从而成为 REST 服务的一部分。
SuperMap iServer 目前有两种方式提供 REST 服务,即基于 Restlet 机制和基于 JAX-RS 机制,进行扩展时,要根据功能模块的实现方式采用不同的扩展方法。
基于 Restlet 机制的iServer REST资源扩展请参考博客:SuperMap iServer REST资源(Restlet)扩展机制简介 ,本文介绍基于 JAX-RS 机制的iServer REST资源扩展。基于 JAX-RS 机制实现的 iServer REST 资源模块有:空间分析模块,提供的扩展形式如下:
• 新资源的扩展:扩展新的REST服务资源。
• 表述生成器扩展:扩展新的表述格式。
• 参数解析器扩展:扩展新的参数解析器。
###基于JAX-RS 机制的REST资源扩展方式
SuperMap iServer提供了两个抽象类供扩展新REST资源使用:
com.supermap.services.rest.resources.JaxrsResourceBase
和
com.supermap.services.rest.resources.JaxAlgorithResultSetResource
前者(JaxrsResourceBase
)是后者(JaxAlgorithResultSetResource
)的父类,后者在前者的基础上实现了POST请求的处理,使支持POST请求及子资源(请求参数returnContent=false时创建子资源存储结果)。
扩展时实现上述两个类之一即可,两个类的类参考详见iServer 6R帮助文档(百度盘:链接:http://pan.baidu.com/s/1c2KhPhY 密码:kfsx)。
以JaxAlgorithResultSetResource为例,扩展的基本方法如下:
/**
* @Path 指定自定义资源的 URI,从资源根目录算起,
* 在 iServer 中,基于 JAX-RS 框架实现的 REST 资源根目录为:
* http://<server>:<port>/iserver/services/<servicecomponent>/<serviceinterface>
* 其中 servicecomponent 是 iServer 三层体系结构中的服务组件,
* serviceinterface 是该服务组件绑定的服务接口(参见:服务的 URI 设置),比如:restjsr
* restjsr 是默认的 JAX-RS REST 服务接口。
*/
@Path("/spatialanalyst/geometry/myResource")
public class MyBufferResultsResource extends JaxAlgorithResultSetResource<T> {
// 用于标志存储在对象仓库中对象类型。
private static final String ALGORITHNAME = "本算法名";
/**
* 本算法名称,用于存取算法结果。
*/
@ Override
protected String getAlgorithmName() {
return ALGORITHNAME;
}
/**
* 实现父类的 runArithmetic ,给出客户端发送 HTTP POST 方法时,需要处理的业务逻辑
* 父类的Post 方法将会调用该方法。
*/
@ Override
protected Object runArithmetic(T params) {
// TODO
}
}
其中泛型T代表POST请求体参数表示的对象,runArithmetic
方法返回值即返回给客户端的结果。
扩展完成配置到iServer即可,资源配置请参考 SuperMap iServer REST资源(Restlet)扩展机制简介。
在iServer帮助文档:开始 > iServer 开发与扩展指南 > 扩展 iServer > 现有 REST 资源扩展 > 基于 JAX-RS 机制 可以找到一个扩展的示例。