source: trunk/docs/services/howtos.txt @ 528

Last change on this file since 528 was 528, checked in by djay, 9 years ago

Add few lines about the Java ZOO-API installation.

  • Property svn:eol-style set to native
  • Property svn:keywords set to HeadURL Date Author Id Rev
  • Property svn:mime-type set to text/plain
File size: 7.7 KB
Line 
1.. _services-howtos:
2
3How To Setup ZOO Services
4=========================
5
6:Authors: Nicolas Bozon, Gérald Fenoy, Jeff McKenna, Luca Delucchi
7:Last Updated: $Date: 2014-11-05 12:00:33 +0000 (Wed, 05 Nov 2014) $
8
9ZOO Services are quite easy to create once you have installed the ZOO Kernel and have
10chosen code (in the language of your choice) to turn into a ZOO service. Here are some
11HelloWorlds in Python, PHP, Java  and JavaScript with links to their corresponding
12``.zcfg`` files.
13
14.. contents:: Table of Contents
15    :depth: 3
16    :backlinks: top
17
18Common informations
19----------------------
20
21The function of the process for each programming language take three arguments: the main
22configuration, inputs and outputs.
23
24.. Note:: The service has to **return 3 if the process run successfully instead it
25          return 4** if the process end with an error.
26
27Python
28------
29
30You'll find here information needed to deploy your own Python Services Provider.
31
32Python ZCFG requirements
33************************
34
35.. Note:: For each Service provided by your ZOO Python Services Provider, the ZCFG File
36          must be named the same as the Python module function name (also the case of
37          characters is important).
38
39The ZCFG file should contain the following :
40
41
42serviceType
43    Python
44serviceProvider
45    The name of the Python module to use as a ZOO Service Provider. For instance, if your
46    script, located in the same directory as your ZOO Kernel, was named ``my_module.py`` then
47    you should use ``my_module`` (the Python module name) for the serviceProvider value in ZCFG file.
48
49Python Data Structure used
50**************************
51The three parameters of the function are passed to the Python module as dictionaries.
52
53Following you'll find an example for each parameters
54
55Main configuration
56^^^^^^^^^^^^^^^^^^^^^
57Main configuration contains several informations, some of them are really useful to develop your service.
58Following an example ::
59
60  {
61  'main': {'lang': 'en-UK',
62           'language': 'en-US',
63           'encoding': 'utf-8',
64           'dataPath': '/var/www/tmp',
65           'tmpPath': '/var/www/tmp',
66           'version': '1.0.0',
67           'mapserverAddress': 'http://localhost/cgi-bin/mapserv',
68           'isSoap': 'false',
69           'tmpUrl': 'http://localhost/tmp/',
70           'serverAddress': 'http://localhost/zoo'
71          },
72  'identification': {'keywords': 'WPS,GIS',
73                     'abstract': 'WPS services for testing ZOO',
74                     'fees': 'None',
75                     'accessConstraints': 'none',
76                     'title': 'testing services'
77                    },
78  'lenv': {'status': '0',
79           'soap': 'false',
80           'cwd': '/usr/lib/cgi-bin',
81           'sid': '24709'
82          },
83  'env': {'DISPLAY': 'localhost:0'},
84  'provider': {'addressCountry': 'it',
85               'positionName': 'Developer',
86               'providerName': 'Name of provider',
87               'addressAdministrativeArea': 'False',
88               'phoneVoice': 'False',
89               'addressCity': 'City',
90               'providerSite': 'http://www.your.site',
91               'addressPostalCode': '38122',
92               'role': 'Developer',
93               'addressDeliveryPoint': 'False',
94               'phoneFacsimile': 'False',
95               'addressElectronicMailAddress': 'your@email.com',
96               'individualName': 'Your Name'
97              }
98  }
99
100Inputs
101^^^^^^^^^^^^
102The inputs are somethings like this ::
103
104  {
105  'variable_name': {'minOccurs': '1',
106                    'DataType': 'string',
107                    'value': 'this_is_the_value',
108                    'maxOccurs': '1',
109                    'inRequest': 'true'
110                   }
111  }
112
113The access to the value you have to require for the ``value`` parameter, something like this ::
114
115  yourVariable = inputs['variable_name']['value']
116
117Outputs
118^^^^^^^^^^^^^
119The outputs data as a structure really similar to the inputs one ::
120
121  {
122  'result': {'DataType': 'string',
123             'inRequest': 'true',
124            }
125  }
126
127There is no ``'value'`` parameter before you assign it ::
128
129  inputs['result']['value'] = yourOutputDataVariable
130
131The return statement has to be an integer: corresponding to the service status code.
132
133To add a message for the wrong result you can add the massage to ``conf["lenv"]["message"]``,
134for example:
135
136.. code-block:: python
137
138  conf["lenv"]["message"] = 'Your module return an error'
139
140Sample ZOO Python Services Provider
141***********************************
142
143The following code represents a simple ZOO Python Services Provider which provides only one
144Service, the HelloPy one.
145
146.. code-block:: python
147
148  import sys
149  def HelloPy(conf,inputs,outputs):
150     outputs["Result"]["value"]="Hello "+inputs["a"]["value"]+" from Python World !"
151     return 3
152
153PHP
154---
155
156.. code-block:: php
157
158  <?
159  function HelloPHP(&$main_conf,&$inputs,&$outputs){
160     $outputs["Result"]["value"]="Hello ".$inputs[S][value]." from PHP world !";
161     return 3;
162  }
163  ?>
164
165Java
166----
167
168ZOO-API
169*******
170
171Before you build your first ZOO-Service implemented inn Java, it is
172recommended that you first build the ZOO class of the Java ZOO-API.
173
174.. Note:: You should build ZOO-Kernel prior to follow this instructions.
175
176To build the ZOO.class of the ZOO-API for Java, use the following
177command:
178
179.. code-block:: guess
180
181  cd zoo-api/java
182  make
183  cp ZOO.class libZOO.so /usr/lib/cgi-bin
184
185.. Note:: running the previous commands will require that both
186          ``javac`` and ``javah`` are in your PATH.
187
188Java ZCFG requirements
189**********************************
190
191.. Note:: For each Service provided by your ZOO Java Services Provider
192          (your corresponding Java class), the ZCFG File must be
193          named the same as the Java public method name (also the
194          case of characters is important).
195
196The ZCFG file should contain the following :
197
198serviceType
199    Java
200serviceProvider
201    The name of the Java class to use as a ZOO Service Provider. For instance, if your
202    java class, located in the same directory as your ZOO-Kernel, was
203    named ``HelloWorld.class`` then you should use ``HelloWorld``.
204
205
206Java Data Structure used
207********************************
208
209The three parameters of the function are passed to the Java function
210as `java.util.HashMap <http://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html>`__.
211
212Sample ZOO Java Services Provider
213******************************************
214
215.. code-block:: java
216
217  import java.util.*;
218  public class HelloJava {
219    public static int HelloWorldJava(HashMap conf,HashMap inputs, HashMap outputs) {
220       HashMap hm1 = new HashMap();
221       hm1.put("dataType","string");
222       HashMap tmp=(HashMap)(inputs.get("S"));
223       java.lang.String v=tmp.get("value").toString();
224       hm1.put("value","Hello "+v+" from JAVA WOrld !");
225       outputs.put("Result",hm1);
226       System.err.println("Hello from JAVA WOrld !");
227       return ZOO.SERVICE_SUCCEEDED;
228    }
229  }
230
231Javascript
232----------
233
234ZOO API
235*********
236
237If you need to use :ref:`ZOO API <api>` in your service, you have first to copy ``zoo-api.js``
238and ``zoo-proj4js.js`` where your services are located (for example in Unix system probably in
239``/usr/lib/cgi-bin/``
240
241Javascript ZCFG requirements
242**********************************
243
244.. Note:: For each Service provided by your ZOO Javascript Services Provider, the ZCFG File
245          must be named the same as the Javascript function name (also the case of
246          characters is important).
247
248The ZCFG file should contain the following :
249
250serviceType
251    JS
252serviceProvider
253    The name of the JavaScript file to use as a ZOO Service Provider. For instance, if your
254    script, located in the same directory as your ZOO Kernel, was named ``my_module.js`` then
255    you should use ``my_module.js``.
256
257
258Javascript Data Structure used
259********************************
260
261The three parameters of the function are passed to the JavaScript function as Object.
262
263Sample ZOO Javascript Services Provider
264******************************************
265
266.. code-block:: javascript
267
268  function hellojs(conf,inputs,outputs){
269     outputs=new Array();
270     outputs={};
271     outputs["result"]["value"]="Hello "+inputs["S"]["value"]+" from JS World !";
272     return Array(3,outputs);
273  }
274
Note: See TracBrowser for help on using the repository browser.

Search

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png