发布领域服务组件为 REST 资源

发送反馈


在 SuperMap iServer/iEdge将领域组件发布为 REST 服务的机制里,可以将领域组件实现类中的方法发布成 REST 资源。

例如,针对将如下组件实现发布为 REST 资源:

package com.supermap.sample.DomainResource;

public class myComponent  {

        //比较两个字符串是否相同,简单参数类型,返回简单的结果。

        public boolean compareString(String str1, String str2) {

                boolean flag = true;

                if (str1 != null) {

                        if (!str1.equals(str2)) {

                                flag = false;

                        }

                } else if (str2 != null) {

                        flag = false;

                }

                return flag;

        }

}

只需将该类编译后的 Jar 包放到 %SuperMapiServer_HOME%/webapps/iserver/WEB-INF/lib 目录下,然后在 %SuperMap iServer_HOME%/webapps/iserver/WEB-INF 目录下的 iserver-services.xml 文件中增加该组件的配置即可,如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<server>

        ...

        <application>

                ...

                <components>

                        ...

                        <component name="myComponent"

                                class="com.supermap.sample.DomainResource.myComponent" providers="" interfaceNames="rest">

                        </component>

                </components>

        </application>

</server>

发布为 REST 服务的领域资源根目录为:http://<iServer-root>/{domainComponentName}/rest,在本示例中,发布为 REST 服务的领域资源根目录为:

http://localhost:8090/iserver/services/myComponent/rest

其资源结构如下:

访问 compareStringResult 资源,获取 XML 表述的一个示例 URI 为:

http://localhost:8090/iserver/services/myComponent/rest/domainComponents/mycomponent/compareStringResult.xml?arg0="abc"&arg1="abc"

响应结果如下:

  <?xml version="1.0" encoding="UTF-8" standalone="no" ?>

  <boolean>true</boolean>

领域组件实现类中,所有有返回值的 public 方法都将被发布成资源,方法的参数类型和个数不同,发布成为的领域资源的类型也不同(请参见 JavaDoc 文档中的 ResourceType 枚举提到的两种领域资源类型,即 DomainArithmeticResource 和 DomainArithResultResource),下面将详细说明。

首先我们对领域组件中的方法做一个界定,界定为简单方法和复杂方法两种:

把领域资源也界定为简单领域资源和复杂领域资源,SuperMap iServer 将领域组件中的简单方法发布成简单领域资源,复杂方法发布成复杂领域资源:

下表列举了一个类中的 public 方法跟自动发布为 REST 资源后的资源名的对应关系:

public 方法 含义 对应的资源名
void output(String s) 无返回值的方法。 无。
String getParam() get 方法,获取参数。 param
boolean isParamNull() get 方法,判断是否为空。 paramNull
boolean isParamNull(String s) 一般简单方法(参见 方法类型的说明)。 isParamNullResult
String Param() 参数为空的简单方法,用于获取 param 参数。 ParamResult
Point getCenter(Point, Point) 复杂方法,因为参数类型为复杂类型(参见 方法类型的说明)。 getCenterResults
boolean compareString(String, String) 简单方法(参见 方法类型的说明)。 compareStringResult
boolean isStrContainedInArray(String, String[]) 复杂方法,因为参数类型为复杂类型(参见 方法类型的说明)。 isStrContainedInArrayResults

需要说明的是,领域组件中 public 方法发布成 REST 资源后,使用 HTTP 方法访问时,传递的参数要按原来方法中参数的顺序,依次使用 arg0、arg1、arg2……作为参数字段的名称,参数的传递在 URI 中通过键-值对的方式进行。

关于更多领域空间服务扩展的内容,请参见:领域服务扩展