创建自己的动物园服务

动物园服务 一旦您安装了Zoo内核并选择了代码(用您选择的语言)来转换为Zoo服务,就很容易创建了。以下是Python、PHP、Java、C语言和JavaScript中的一些HeloRoLDS及其对应的链接 .zcfg 文件夹。

一般信息

每个编程语言的过程函数都有三个参数:主配置、输入和输出。

注解

服务必须返回 3 如果进程成功运行

注解

服务必须返回 4 如果进程以错误结束

Python

您将在这里找到部署自己的Python服务提供者所需的信息。

python zcfg要求

注解

对于Zoo python服务提供商提供的每个服务,zcfg文件的名称必须与python模块函数名相同(字符的大小写也很重要)。

zcfg文件应包含以下内容:

服务类型

Python

服务提供商

用作动物园服务提供程序的python模块的名称。例如,如果您的脚本与Zoo内核位于同一个目录中,则命名为 my_module.py 那你应该用 my_module (python模块名)用于zcfg文件中的serviceprovider值。

使用的python数据结构

函数的三个参数作为字典传递给python模块。

接下来,您将找到每个参数的示例

主要配置

主配置包含多个信息,其中一些信息对于开发您的服务非常有用。举个例子:

{
'main': {'lang': 'en-UK',
         'language': 'en-US',
         'encoding': 'utf-8',
         'dataPath': '/var/www/tmp',
         'tmpPath': '/var/www/tmp',
         'version': '1.0.0',
         'mapserverAddress': 'http://localhost/cgi-bin/mapserv',
         'isSoap': 'false',
         'tmpUrl': 'http://localhost/tmp/',
         'serverAddress': 'http://localhost/zoo'
        },
'identification': {'keywords': 'WPS,GIS',
                   'abstract': 'WPS services for testing ZOO',
                   'fees': 'None',
                   'accessConstraints': 'none',
                   'title': 'testing services'
                  },
'lenv': {'status': '0',
         'soap': 'false',
         'cwd': '/usr/lib/cgi-bin',
         'sid': '24709'
        },
'env': {'DISPLAY': 'localhost:0'},
'provider': {'addressCountry': 'it',
             'positionName': 'Developer',
             'providerName': 'Name of provider',
             'addressAdministrativeArea': 'False',
             'phoneVoice': 'False',
             'addressCity': 'City',
             'providerSite': 'http://www.your.site',
             'addressPostalCode': '38122',
             'role': 'Developer',
             'addressDeliveryPoint': 'False',
             'phoneFacsimile': 'False',
             'addressElectronicMailAddress': 'your@email.com',
             'individualName': 'Your Name'
            }
}

输入

输入内容如下:

{
'variable_name': {'minOccurs': '1',
                  'DataType': 'string',
                  'value': 'this_is_the_value',
                  'maxOccurs': '1',
                  'inRequest': 'true'
                 }
}

访问您需要的值 value 参数,类似于:

yourVariable = inputs['variable_name']['value']

输出

输出数据的结构与输入数据的结构非常相似:

{
'result': {'DataType': 'string',
           'inRequest': 'true',
          }
}

没有 'value' 参数分配前:

inputs['result']['value'] = yourOutputDataVariable

RETURN语句必须是整数:对应于服务状态代码。

要为错误的结果添加消息,可以将按摩添加到 conf["lenv"]["message"] 例如:

conf["lenv"]["message"] = 'Your module return an error'

Zoo python服务提供商示例

下面的代码表示一个简单的Zoo python服务提供程序,它只提供一个服务,即hellopy服务。

import zoo
import sys
def HelloPy(conf,inputs,outputs):
   outputs["Result"]["value"]="Hello "+inputs["a"]["value"]+" from Python World !"
   return zoo.SERVICE_SUCCEEDED

PHP

动物园-API

php语言的zoo-api可以从您的服务代码中自动获得。在zoo-api中定义了以下函数:

Int-Zoo_服务成功()

返回服务值成功

Int-Zoo_服务失败()

返回服务值失败

字符串动物园翻译(字符串A)

返回翻译后的字符串(使用“zoo服务” textdomain

void zoo_updatestus(数组conf,字符串message,int pourcent)

更新正在运行的服务的状态

php zcfg要求

zcfg文件应包含以下内容:

服务类型

PHP

服务提供商

用作动物园服务提供者的PHP脚本(即service.php)的名称。

使用的PHP数据结构

这三个参数作为 Arrays .

Zoo PHP服务提供商示例

<?
function HelloPHP(&$main_conf,&$inputs,&$outputs){
   $tmp="Hello ".$inputs[S][value]." from PHP world !";
   $outputs["Result"]["value"]=zoo_Translate($tmp);
   return zoo_SERVICE_SUCCEEDED();
}
?>

Java

特别是对于Java支持,您可以将以下三个部分添加到您的 main.cfg 文件:

[java]

本节用于将-d*参数传递给由zoo内核创建的用于处理zoo服务的JVM(请参见 ref. 1ref. 2 可提供样品)。对于每个地图 a = b 在中可用 [java] 第节,选项 -Da=b 将传递给JVM。

[爪哇]

本节用于将-x*选项传递给JVM(请参见 ref. )。对于每个地图 a = b 在中可用 [javax] 第节,选项 -Xab 将传递给JVM(即 mx=2G 通过 -Xmx2G

[javaxx公司]

本节用于将-xx:*参数传递给由zoo内核创建的用于处理zoo服务的JVM(请参见 ref. 1ref. 2 可提供样品)。对于每个地图 a = b 在中可用 [javaxx] 第节,选项 -XX:a=b 将传递给JVM。如果是地图 a = minus (分别 a=plus )然后选择 -XX:-a (尊重地 -XX:+a )将通过。

动物园-API

在构建Java实现的第一个动物园服务之前,建议首先构建Java ZooAPI的动物园类。

注解

您应该在遵循此说明之前构建动物园内核。

要为Java构建ZOO-API的ZOO.class,请使用以下命令:

cd zoo-api/java
make

注解

运行前面的命令将要求 javacjavah 在你的道路上。

你应该复制 libZOO.so 在一个地方,Java可以找到它。如果您定义了 java.library.path 钥匙组件 /usr/lib/cgi-bin (在 [java] 然后你应该把它复制到那里。

cp libZOO.so /usr/lib/cgi-bin

zoo-api提供以下功能:

字符串转换(字符串s)

此函数调用负责搜索翻译的内部zoo内核函数 s 在动物园服务字典里。

void updateStatus(hashmap conf、string pourcent、string message)

此函数调用负责更新正在运行的服务状态的updateStatus zoo内核函数(仅在异步调用该服务时有用)。

Java ZCFG要求

注解

对于您的动物园Java服务提供者(您的对应Java类)提供的每一项服务,ZCFG文件应该具有与服务(区分大小写)对应的Java公共方法的名称。

zcfg文件应包含以下内容:

服务类型

Java

服务提供商

要用作动物园服务提供者的Java类的名称。例如,如果您的Java类位于与您的动物园内核相同的目录中,则命名为 HelloJava.class 那你应该用 HelloJava .

使用的Java数据结构

这三个参数被传递给Java函数 java.util.HashMap .

动物园Java服务提供商

import java.util.*;
public class HelloJava {
  public static int HelloWorldJava(HashMap conf,HashMap inputs, HashMap outputs) {
     HashMap hm1 = new HashMap();
     hm1.put("dataType","string");
     HashMap tmp=(HashMap)(inputs.get("S"));
     java.lang.String v=tmp.get("value").toString();
     hm1.put("value","Hello "+v+" from JAVA WOrld !");
     outputs.put("Result",hm1);
     System.err.println("Hello from JAVA WOrld !");
     return ZOO.SERVICE_SUCCEEDED;
  }
}

C#

特别是对于C支持,您应该将以下部分添加到您的 main.cfg 文件。

[mono]

此部分用于定义 libPathetcPath Mono.NET框架所需。

动物园-API

在构建Mono中实现的第一个动物园服务之前,应该首先构建 ZMaps.dll 包含mono-zoo-api。

注解

您应该在遵循此说明之前构建动物园内核。

cd zoo-api/mono
make

那么你应该复制 ZMaps.dll 在你 servicePath 或在目录中 zoo_loader.cgi 文件已存储。

zoo-api可从名为zoo-api的C类获得,并提供以下静态变量:

int服务成功

在服务成功结束时返回的值。

int service_失败

失败时要重试的值。

zoo-api提供以下静态功能:

字符串转换(字符串s)

此函数调用负责搜索翻译的内部zoo内核函数 s 在动物园服务字典里。

void updateStatus(zmaps conf,string pourcent,string message)

此函数调用负责更新正在运行的服务状态的updateStatus zoo内核函数(仅在异步调用该服务时有用)。

C ZCFG要求

注解

对于Zoo Mono服务提供商(对应的Mono类)提供的每个服务,zcfg文件应该具有与该服务对应的Mono公共静态函数的名称(区分大小写)。

zcfg文件应包含以下内容:

服务类型

单声道

服务提供商

包含动物园服务提供商(包括 .dll

服务命名空间

包含Zoo服务提供程序的C类的命名空间。

服务类

包含Zoo服务提供程序定义的C类的名称。

使用的数据结构

函数的三个参数作为 ZMaps 基本上是 Dictionary<String,_ZMaps> .

Zoo C服务提供商示例

using System;
using ZooGenerics;
using System.Threading;

namespace Default
{
    public class Service{
	public static int HelloMono(ZMaps conf,ZMaps inputs,ZMaps outputs){
	    _ZMaps test;
	    if(inputs.TryGetValue("a", out test)){
		ZMap content=test.getContent();
		String test1;
		if(content.TryGetValue("value", out test1)){
		    outputs.setMapsInMaps("Result","value",ZOO_API.Translate("Hello ")+test1+" from the Mono .NET framework World!");
		}
		return ZOO_API.SERVICE_SUCCEEDED;
	    }else{
		conf.setMapsInMaps("lenv","message","Unable to run the service");
		return ZOO_API.SERVICE_FAILED;
	    }
	}
	public static int longProcessMono(ZMaps conf,ZMaps inputs,ZMaps outputs){
	    _ZMaps test;
	    int i=1;
	    while(i<10){
		ZOO_API.UpdateStatus(conf,"Step "+i,(i*10));
		Thread.Sleep(1000);
		i+=1;
	    }
	    if(inputs.TryGetValue("a", out test)){
		ZMap content=test.getContent();
		String test1;
		if(content.TryGetValue("value", out test1)){
		    outputs.setMapsInMaps("Result","value",ZOO_API.Translate("Hello ")+test1+" from the Mono .NET framework World!");
		}
		return ZOO_API.SERVICE_SUCCEEDED;
	    }else{
		conf.setMapsInMaps("lenv","message","Unable to run the service");
		return ZOO_API.SERVICE_FAILED;
	    }
	}
    };
}

JavaScript

动物园API

如果你需要使用 ZOO API 为您服务,您必须先复制 zoo-api.jszoo-proj4js.js 服务的位置(例如,在UNIX系统中,可能在 /usr/lib/cgi-bin/

javascript zcfg要求

注解

对于Zoo JavaScript服务提供商提供的每个服务,zcfg文件的名称必须与javascript函数名相同(字符的大小写也很重要)。

zcfg文件应包含以下内容:

服务类型

JS

服务提供商

要用作动物园服务提供程序的javascript文件的名称。例如,如果您的脚本与Zoo内核位于同一个目录中,则命名为 my_module.js 那你应该用 my_module.js .

使用的javascript数据结构

函数的三个参数作为对象传递给javascript函数。

示例zoo javascript服务提供程序

function hellojs(conf,inputs,outputs){
   outputs=new Array();
   outputs={};
   outputs["result"]["value"]="Hello "+inputs["S"]["value"]+" from JS World !";
   return Array(3,outputs);
}

R

动物园API

要使用动物园项目中的R语言,必须首先复制 minimal.r 与动物园内核在同一目录中。

zoo-api可从r脚本获得,并提供对全局zoo环境的访问,该环境包含静态变量以及输出和conf的字典:

国际动物园 [["SERVICE_SUCCEEDED"] ]

在服务成功结束时返回的值。

国际动物园 [["SERVICE_FAILED"] ]

失败时要重试的值。

zoo-api提供以下功能:

字符串zootranse(字符串s)

此函数调用负责搜索翻译的内部zoo内核函数 s 在动物园服务字典里。

void zooUpdateStatus(zmaps conf,string pourcent)

此函数调用负责更新正在运行的服务状态的updateStatus zoo内核函数(仅在异步调用该服务时有用)。

R ZCFG要求

注解

对于Zoo R服务提供商提供的每个服务,zcfg文件的名称必须与R函数名相同(区分大小写)。

zcfg文件应包含以下内容:

服务类型

R

服务提供商

要用作动物园服务提供商的R文件的名称。例如,如果您的脚本与Zoo内核位于同一个目录中,则命名为 my_module.r 那你应该用 my_module.r .

使用的数据结构

函数的三个参数作为r字典传递给r函数。

R语言的特殊性使得使用全局变量比通过引用传递参数更容易,就像在其他编程语言中那样。这就是为什么您必须使用全局变量作为主配置字典来访问outpus的原因。

Zoo R服务提供商示例

source("minimal.r")

hellor <- function(a,b,c) {
    # Set the result
    zoo[["outputs"]][["Result"]][["value"]] <<- ZOOTranslate(paste("Hello",b[["S"]][["value"]],"from the R World!",sep=" "))
    # Return SERVICE_SUCCEEDEED
    return(zoo[["SERVICE_SUCCEEDEED"]])
}