创建自己的动物园服务¶
动物园服务 一旦您安装了Zoo内核并选择了代码(用您选择的语言)来转换为Zoo服务,就很容易创建了。以下是Python、PHP、Java、C语言和JavaScript中的一些HeloRoLDS及其对应的链接 .zcfg
文件夹。
目录
一般信息¶
每个编程语言的过程函数都有三个参数:主配置、输入和输出。
备注
服务必须返回 3 如果进程成功运行
备注
服务必须返回 4 如果进程以错误结束
Python¶
您将在这里找到部署自己的Python服务提供者所需的信息。
动物园-API¶
从定义服务的python模块中,您可以通过导入 zoo
模块。这里不需要安装任何东西,该模块将在运行时从Zoo-Kernel代码自动创建。
ZOO-API提供以下属性:
- SERVICE_SUCCEEDED
在服务成功结束时返回的值。
- SERVICE_FAILED
失败时要重试的值。
Zoo-API中定义了以下函数:
- _(StrToTranslate)
返回翻译后的字符串(使用“zoo服务” textdomain )
- UPDATE_STATUS(didicConf,iPourcent)
更新正在运行的服务的状态
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. 1 或 ref. 2 可提供样品)。对于每个地图
a = b
在中可用[java]
第节,选项-Da=b
将传递给JVM。- [爪哇]
本节用于将-x*选项传递给JVM(请参见 ref. )。对于每个地图
a = b
在中可用[javax]
第节,选项-Xab
将传递给JVM(即mx=2G
通过-Xmx2G
)- [javaxx公司]
本节用于将-xx:*参数传递给由zoo内核创建的用于处理zoo服务的JVM(请参见 ref. 1 或 ref. 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
备注
运行前面的命令将要求 javac
和 javah
在你的道路上。
你应该复制 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]
此部分用于定义
libPath
和etcPath
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.js
和 zoo-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"]])
}