[Ds-java-dev] svn commit r14523 - trunk/solutions/data-services/php
svn at wso2.org
svn at wso2.org
Wed Mar 5 02:39:22 PST 2008
Author: manoj
Date: Wed Mar 5 02:39:12 2008
New Revision: 14523
Log:
Added php data service
Added:
trunk/solutions/data-services/php/
trunk/solutions/data-services/php/CustomersInBostonClient.php (contents, props changed)
trunk/solutions/data-services/php/CustomersInBostonService.php (contents, props changed)
trunk/solutions/data-services/php/DSConstants.php (contents, props changed)
trunk/solutions/data-services/php/DSProcessor.php (contents, props changed)
trunk/solutions/data-services/php/DataService.php (contents, props changed)
trunk/solutions/data-services/php/DataServiceClient.php (contents, props changed)
trunk/solutions/data-services/php/MyService.php (contents, props changed)
Added: trunk/solutions/data-services/php/CustomersInBostonClient.php
==============================================================================
--- (empty file)
+++ trunk/solutions/data-services/php/CustomersInBostonClient.php Wed Mar 5 02:39:12 2008
@@ -0,0 +1,35 @@
+<?php
+/*
+ * Copyright 2005,2006 WSO2, Inc. http://wso2.com
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+$requestPayloadString = <<<XML
+<customersInBoston>
+</customersInBoston>
+XML;
+try {
+ $client = new WSClient(array( "to" => "http://localhost:8080/samples/DataService/CustomersInBostonService.php","useWSA"=>TRUE,"action"=>"urn:ds"));
+ $responseMessage = $client->request( $requestPayloadString );
+ printf("Response = %s <br>", htmlspecialchars($responseMessage->str));
+
+} catch (Exception $e) {
+
+ if ($e instanceof WSFault) {
+ printf("Soap Fault: %s\n", $e->Reason);
+ } else {
+ printf("Message = %s\n",$e->getMessage());
+ }
+}
+?>
Added: trunk/solutions/data-services/php/CustomersInBostonService.php
==============================================================================
--- (empty file)
+++ trunk/solutions/data-services/php/CustomersInBostonService.php Wed Mar 5 02:39:12 2008
@@ -0,0 +1,46 @@
+<?php
+/*
+ * Copyright 2005,2006 WSO2, Inc. http://wso2.com
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once("DataService.php");
+
+$config = array("username"=>"root", "password"=>"","dbname"=>"ds","dbhost"=>"localhost");
+
+$inputFormat = <<<XML
+<call-query href="customersInBostonSQL" sqlType="STRING" />
+</request>
+XML;
+
+$outputFormat = <<<XML
+<result element="customers" rowName="customer">
+<element name="customer-name" column="customerName" />
+<element name="contact-last-name" column="contactLastName" />
+<element name="contact-first-name" column="contactFirstName" />
+<element name="phone" column="phone" />
+<element name="city" column="city" />
+<element name="country" column="country" />
+</result>
+XML;
+
+//$sql = "select CUSTOMERNUMBER, CONTACTLASTNAME, CONTACTFIRSTNAME, ADDRESSLINE1, ADDRESSLINE2, CITY, STATE, POSTALCODE, COUNTRY from Customers where CONTACTLASTNAME = ? and CONTACTFIRSTNAME = ?";
+$sql = "select * from Customers where city = 'Boston' and country = 'USA'";
+//where employeeNumber = ?";
+
+$operations = array("customersInBoston"=>array(/*"inputFormat"=>$inputFormat,*/ "outputFormat"=>$outputFormat, "sql"=>$sql));
+
+$my_data_service = new DataService(array("config"=>$config,"operations"=>$operations));
+$my_data_service->reply();
+?>
Added: trunk/solutions/data-services/php/DSConstants.php
==============================================================================
--- (empty file)
+++ trunk/solutions/data-services/php/DSConstants.php Wed Mar 5 02:39:12 2008
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Created on Feb 13, 2008
+ *
+ * To change the template for this generated file go to
+ * Window - Preferences - PHPeclipse - PHP - Code Templates
+ */
+
+ define("DS_INPUT_FORMAT","inputFormat");
+ define("DS_OUTPUT_FORMAT","outputFormat");
+ define("DS_SQL","sql");
+ define("DS_OPERATIONS","operations");
+ define("DS_CONFIG","config");
+ define("DS_USERNAME","username");
+ define("DS_PASSWORD","password");
+ define("DS_DBHOST","dbhost");
+ define("DS_DBNAME","dbname");
+ define("DS_SOCKET","socket");
+ define("DS_PORT","port");
+ define("DS_RESULT_ELEMENT","result_element");
+ define("DS_RESULT_ROW","result_row");
+?>
Added: trunk/solutions/data-services/php/DSProcessor.php
==============================================================================
--- (empty file)
+++ trunk/solutions/data-services/php/DSProcessor.php Wed Mar 5 02:39:12 2008
@@ -0,0 +1,407 @@
+<?php
+/*
+ * Created on Feb 13, 2008
+ *
+ * To change the template for this generated file go to
+ * Window - Preferences - PHPeclipse - PHP - Code Templates
+ */
+
+require_once('DSConstants.php');
+
+class DSProcessor
+{
+ private $operations;
+ private $ops_to_input_format;
+ private $ops_to_output_format;
+ private $ops_to_sql;
+
+ private $username;
+ private $password;
+ private $dbhost;
+ private $dbname;
+ private $socket;
+ private $port;
+ private $operation;
+ private $input_format;
+ private $output_format;
+ private $sql;
+
+ // key -> Element Name value -> query param
+ private $query_params;
+ private $params_type;
+ private $param_to_value;
+ private $is_prepared_stmt_query;
+
+
+ private $output_params;
+ // store result xmls root element name and corresponding rowName
+ private $result_element;
+
+ private $type_map = array(
+ "CHAR" => "string",
+ "VARCHAR" => "string",
+ "STRING" =>"string",
+ "LONGVARCHAR" => "string",
+ "NEMERIC" => "string",
+ "DECIMAL" => "int",
+ "BIT" =>"boolean",
+ "SAMLLINT"=>"int",
+ "INTEGER"=>"int",
+ "BIGINT"=>"int",
+ "REAL"=>"double",
+ "FLOAT"=>"double",
+ "DOUBLE"=>"double");
+
+ public function __construct($args)
+ {
+ $this->operations = $args[DS_OPERATIONS];
+ $this->ops_to_input_format = array();
+ $this->ops_to_output_format = array();
+ $this->ops_to_sql = array();
+ $this->process_operations($args[DS_OPERATIONS]);
+ $this->process_db_config($args[DS_CONFIG]);
+ }
+
+ public function handle($message){
+ $xmlstr = "";
+ if(!is_null($message)){
+ $xmlstr = $this->process_inmessage($message->str);
+ }
+ if(!is_null($xmlstr))
+ return new WSMessage($xmlstr);
+ else
+ return null;
+ }
+
+ private function process_operations($operations){
+ foreach($operations as $key => $value){
+ if(is_array($value)){
+ if(!is_null($value[DS_INPUT_FORMAT])){
+ $this->ops_to_input_format[$key] = $value[DS_INPUT_FORMAT];
+ }else{
+ error_log("Input format missing for operation ->".$key."");
+ }
+ if(!is_null($value[DS_OUTPUT_FORMAT])){
+ $this->ops_to_output_format[$key] = $value[DS_OUTPUT_FORMAT];
+ }else{
+ error_log("Output format missing for operation ->".$key."");
+ }
+ if(!is_null($value[DS_SQL])){
+ $this->ops_to_sql[$key] = $value[DS_SQL];
+ }else{
+ error_log("SQL String missing for operation ->".$key."");
+ }
+ }
+ }
+ }
+
+ private function process_db_config($config){
+ if(is_array($config)){
+ $this->username = $config[DS_USERNAME];
+ $this->dbname = $config[DS_DBNAME];
+ $this->dbhost = $config[DS_DBHOST];
+ $this->password = $config[DS_PASSWORD];
+ $this->socket = $config[DS_SOCKET];
+ $this->port = $config[DS_PORT];
+ }
+ }
+
+
+ private function process_inmessage($xmlstr){
+ $doc = new DOMDocument();
+ $doc->preserveWhiteSpace = false;
+ $status = $doc->loadXML($xmlstr);
+ if($status == false){
+ error_log("Dom Document creation failed, Invalid XML String",0);
+ }
+
+ $dom_node = $doc->firstChild;
+ if(!is_null($dom_node)){
+ $op_name = $dom_node->localName;
+ if($this->operations[$op_name]){
+ // Operation exists Get the input and output format
+ $this->operation = $op_name;
+ $this->input_format = $this->ops_to_input_format[$op_name];
+ $this->output_format = $this->ops_to_output_format[$op_name];
+ $this->sql = $this->ops_to_sql[$op_name];
+ }
+ }
+ $this->process_input_format();
+ $this->extract_parameter_values_from_inmessage($doc);
+ $this->process_output_params();
+ return $this->execute_query();
+ }
+
+ private function validate_inmessage($domnode){
+ $input_format = $this->ops_to_input_format[$this->operation];
+ $doc = new DOMDocument();
+ $doc->preserveWhiteSpace = false;
+ $status = $doc->loadXML($input_format);
+ if($status == false){
+ error_log("Invalid XML Input Format for operation->".$this->current_operation);
+ }
+ $inputnodes = $doc->firstChild;
+
+ }
+
+ private function execute_query(){
+ $xmlstr ='';
+ $mysqli = $this->db_connect();
+ if(!$mysqli)
+ return;
+ if($this->is_prepared_stmt_query){
+ $xmlstr = $this->handle_prepared_stmt_query($mysqli);
+ }else{
+ $xmlstr = $this->handle_query($mysqli);
+ }
+ $this->db_close($mysqli);
+ return $xmlstr;
+ }
+
+ private function extract_parameter_values_from_inmessage($doc){
+ if($doc){
+ $dom_node = $doc->firstChild;
+ if(!is_null($dom_node) && $dom_node->hasChildNodes()){
+ $query_params = array();
+ $params_type = array();
+ $child_list = $dom_node->childNodes;
+ $param_to_value = array();
+ foreach($child_list as $child){
+ if($child->nodeType == XML_ELEMENT_NODE){
+ $localname = $child->localName;
+ $nodevalue = $child->nodeValue;
+ if($this->query_params[$localname]){
+ $param_to_value[$this->query_params[$localname]]= $nodevalue;
+ }
+ }
+ }
+ $this->param_to_value = $param_to_value;
+ }
+ }
+ }
+
+ private function process_input_format(){
+ if($this->input_format){
+ $doc = new DOMDocument();
+ $doc->preserveWhiteSpace = false;
+ $status = $doc->loadXML($this->input_format);
+ if($status == false){
+ error_log("Dom Document creation failed, Invalid XML String",0);
+ }
+ $dom_node = $doc->firstChild;
+ if(!is_null($dom_node) && $dom_node->localName == 'request'){
+ $query_params = array();
+ $params_type = array();
+ $child_list = $dom_node->childNodes;
+ foreach($child_list as $child){
+ if($child->localName == 'with-param' && $child->hasAttributes()){
+ $name = $child->attributes->getNamedItem('name')->value;
+ $query_param = $child->attributes->getNamedItem('query-param')->value;
+ $param_type = $child->attributes->getNamedItem('sqlType')->value;
+ $query_params[$name] = $query_param;
+ $params_type[$name]= $param_type;
+ }
+ }
+ $this->query_params = $query_params;
+ $this->params_type = $params_type;
+ $this->is_prepared_stmt_query = true;
+ }
+ }else{
+ $this->is_prepared_stmt_query = false;
+ }
+ }
+
+ private function db_connect(){
+ $mysqli = new mysqli($this->dbhost, $this->username, $this->password, $this->dbname, $this->socket, $this->port);
+ if(mysqli_connect_errno()){
+ error_log("MySql connection failed with error no".mysqli_connect_errno()."");
+ }
+ return $mysqli;
+ }
+
+ private function db_close($mysqli){
+ if($mysqli)
+ $mysqli->close();
+ }
+
+ private function handle_prepared_stmt_query($mysqli){
+ if(!$mysqli)
+ return;
+ $doc = new DOMDocument("");
+ $root = $doc->createElementNS("http://wso2.org/projects/wsf/php/ds","ds:".$this->result_element[DS_RESULT_ELEMENT]);
+ $doc->appendChild($root);
+
+ if($stmt = $mysqli->prepare($this->sql))
+ {
+ $is_fetch === FALSE;
+ $types = '';
+ $typed_value_list = array();
+ $param_value_string = '';
+ $i =0;
+ foreach($this->params_type as $key => $value){
+
+ if($this->param_to_value[$key]){
+ $parameter_value = $this->convert_type($value , $this->param_to_value[$key]);
+ $typed_value_list[$i] = $parameter_value;
+ $param_value_string .= '$typed_value_list['.$i.'],';
+ $i++;
+ if($this->type_map[$value] =='string' ){
+ $types .= "s";
+ }else if($this->type_map[$value] == 'int' || $this->type_map[$value] == 'boolean'){
+ $types .= "i";
+ }else if($this->type_map[$value]== 'double'){
+ $types .= "d";
+ }else{
+ $types .="s";
+ }
+ }
+ }
+
+ $bindings = '$stmt->bind_param("'. $types.'",'.rtrim($param_value_string,",").');';
+
+ eval($bindings);
+ $stmt->execute();
+ $response = array();
+ $results = $stmt->result_metadata();
+ $bind_result = '$stmt->bind_result(';
+ while ($field = $results->fetch_field())
+ {
+ $bind_result .= '$response["' . $field->name . '"],';
+ }
+ $bind_result = rtrim($bind_result, ' ,') . ');';
+ eval($bind_result);
+ while($stmt->fetch()){
+ $row_ele = $doc->createElement($this->result_element[DS_RESULT_ROW]);
+ $root->appendChild($row_ele);
+ foreach($this->output_params as $element_name => $column_name){
+ $column_ele = $doc->createElement($element_name);
+ $row_ele->appendChild($column_ele);
+ $text_node = $doc->createTextNode($response[$column_name]);
+ $column_ele->appendChild($text_node);
+ }
+ $is_fetch=TRUE;
+ }
+ //$stmt->close();
+ if ($is_fetch === FALSE)
+ {
+ $error_ele = $doc->createElement("error");
+ $root->appendChild($error_ele);
+ $text_error = $doc->createTextNode("data not found");
+ $error_ele->appendChild($text_error);
+ }
+ }
+ else
+ {
+ $error_ele = $doc->createElement("error");
+ $root->appendChild($error_ele);
+ $text_error = $doc->createTextNode("table not found");
+ $error_ele->appendChild($text_error);
+ }
+ return $doc->saveXML();
+ }
+
+ private function handle_query($mysqli){
+ if(!$mysqli)
+ return;
+ $doc = new DOMDocument("");
+ $root = $doc->createElementNS("http://wso2.org/projects/wsf/php/ds","ds:".$this->result_element[DS_RESULT_ELEMENT]);
+ $doc->appendChild($root);
+
+ if($result= $mysqli->query($this->sql)){
+ $fetched = FALSE;
+ while($row= $result->fetch_array(MYSQLI_BOTH)){
+ $row_ele = $doc->createElement($this->result_element[DS_RESULT_ROW]);
+ $root->appendChild($row_ele);
+ foreach($this->output_params as $element_name => $column_name){
+ $column_ele = $doc->createElement($element_name);
+ $row_ele->appendChild($column_ele);
+ $text_node = $doc->createTextNode($row[$column_name]);
+ $column_ele->appendChild($text_node);
+ }
+ $fetched = TRUE;
+ }
+ if ($fetched === FALSE)
+ {
+ $error_ele = $doc->createElement("error");
+ $root->appendChild($error_ele);
+ $text_error = $doc->createTextNode("data not found");
+ $error_ele->appendChild($text_error);
+ }
+ }
+ else
+ {
+ $error_ele = $doc->createElement("error");
+ $root->appendChild($error_ele);
+ $text_error = $doc->createTextNode("table not found");
+ $error_ele->appendChild($text_error);
+ }
+
+ return $doc->saveXML();
+ }
+
+ private function process_output_params(){
+ if($this->output_format){
+ $doc = new DOMDocument();
+ $doc->preserveWhiteSpace = false;
+ $status = $doc->loadXML($this->output_format);
+ if($status == false){
+ error_log("Dom Document creation failed, Invalid XML String In output Format",0);
+ }
+ $dom_node = $doc->firstChild;
+ if(!is_null($dom_node) && $dom_node->localName == 'result'){
+ $output_params = array();
+ $result_element = array();
+
+ if($dom_node->hasAttributes())
+ {
+ $element_name ="";
+ $row_name ="";
+
+ if($dom_node->attributes->getNamedItem('element'))
+ {
+ $element_name = $dom_node->attributes->getNamedItem('element')->value;
+ }
+ if($dom_node->attributes->getNamedItem('rowName')){
+ $row_name = $dom_node->attributes->getNamedItem('rowName')->value;
+ }
+
+ $result_element[DS_RESULT_ELEMENT] = $element_name;
+ $result_element[DS_RESULT_ROW] = $row_name;
+ $this->result_element = $result_element;
+ }else{
+ error_log("Result element name and rowName not specified",0);
+ return;
+ }
+ // Iterate over the child elements and extract parameter
+ $child_list = $dom_node->childNodes;
+ foreach($child_list as $child){
+ if($child->localName == 'element' && $child->hasAttributes()){
+ $name = $child->attributes->getNamedItem('name')->value;
+ $column = $child->attributes->getNamedItem('column')->value;
+ $output_params[$name] = $column;
+ }
+ }
+ $this->output_params = $output_params;
+ }
+ }
+ }
+
+ private function convert_type($type,$value){
+ if($value && $type){
+
+ if($this->type_map[$type] =='string' ){
+ return $value;
+ }else if($this->type_map[$type] == 'int'){
+ return (int)$value;
+ }else if($this->type_map[$type]== 'double'){
+ return (double)$value;
+ }else if($this->type_map[$type] == 'boolean'){
+ return (boolean)$value;
+ }else{
+ return $value;
+ }
+ }
+
+ }
+}
+?>
Added: trunk/solutions/data-services/php/DataService.php
==============================================================================
--- (empty file)
+++ trunk/solutions/data-services/php/DataService.php Wed Mar 5 02:39:12 2008
@@ -0,0 +1,44 @@
+<?php
+/*
+ * Copyright 2005,2006 WSO2, Inc. http://wso2.com
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once("DSProcessor.php");
+
+class DataService extends WSService
+{
+
+ private $operations;
+ private $actions;
+ public function __construct($args)
+ {
+ $this->operations = array();
+ $ops = $args[DS_OPERATIONS];
+ foreach($ops as $key => $value){
+ $this->operations = array();
+ $this->operations[$key] = "handle";
+ }
+ $con_args = array("classes"=>array("DSProcessor" =>
+ array("operations"=>$this->operations, "args"=>array($args))));
+
+ foreach($args as $key1 => $value1){
+ if($key1 != "operations" && isset($value1)){
+ $con_args[$key1]=$value1;
+ }
+ }
+ parent::__construct($con_args);
+ }
+}
+?>
Added: trunk/solutions/data-services/php/DataServiceClient.php
==============================================================================
--- (empty file)
+++ trunk/solutions/data-services/php/DataServiceClient.php Wed Mar 5 02:39:12 2008
@@ -0,0 +1,38 @@
+<?php
+/*
+ * Copyright 2005,2006 WSO2, Inc. http://wso2.com
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+$requestPayloadString = <<<XML
+<customerAddress>
+<firstName>Carine</firstName>
+<lastName>Schmitt</lastName>
+</customerAddress>
+XML;
+
+try {
+ $client = new WSClient(array( "to" => "http://localhost:8080/samples/DataService/MyService.php","useWSA"=>TRUE,"action"=>"urn:ds"));
+ $responseMessage = $client->request( $requestPayloadString );
+ printf("Response = %s <br>", htmlspecialchars($responseMessage->str));
+
+} catch (Exception $e) {
+
+ if ($e instanceof WSFault) {
+ printf("Soap Fault: %s\n", $e->Reason);
+ } else {
+ printf("Message = %s\n",$e->getMessage());
+ }
+}
+?>
Added: trunk/solutions/data-services/php/MyService.php
==============================================================================
--- (empty file)
+++ trunk/solutions/data-services/php/MyService.php Wed Mar 5 02:39:12 2008
@@ -0,0 +1,48 @@
+<?php
+/*
+ * Copyright 2005,2006 WSO2, Inc. http://wso2.com
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once("DataService.php");
+
+$config = array("username"=>"root", "password"=>"","dbname"=>"ds","dbhost"=>"localhost");
+
+$inputFormat = <<<XML
+<request><with-param name="lastName" query-param="lastName" sqlType="STRING"/><with-param name="firstName" query-param="firstName" sqlType = "STRING"/>
+</request>
+XML;
+
+
+$outputFormat = <<<XML
+<result element="customer-addresses" rowName="customer-address">
+<element name="customernumber" column="CUSTOMERNUMBER" />
+<element name="contactlastname" column="CONTACTLASTNAME" />
+<element name="contactfirstname" column="CONTACTFIRSTNAME" />
+<element name="addressline1" column="ADDRESSLINE1" />
+<element name="addressline2" column="ADDRESSLINE2" />
+<element name="city" column="CITY" />
+<element name="state" column="STATE" />
+<element name="postalcode" column="POSTALCODE" />
+<element name="country" column="COUNTRY" />
+</result>
+XML;
+
+$sql = "select CUSTOMERNUMBER, CONTACTLASTNAME, CONTACTFIRSTNAME, ADDRESSLINE1, ADDRESSLINE2, CITY, STATE, POSTALCODE, COUNTRY from Customers where CONTACTLASTNAME = ? and CONTACTFIRSTNAME = ?";
+//$sql = "select CUSTOMERNUMBER, CONTACTLASTNAME, CONTACTFIRSTNAME, ADDRESSLINE1, ADDRESSLINE2, CITY, STATE, POSTALCODE, COUNTRY from Customers";
+
+$operations = array("customerAddress"=>array("inputFormat"=>$inputFormat, "outputFormat"=>$outputFormat, "sql"=>$sql));
+$my_data_service = new DataService(array("config"=>$config,"operations"=>$operations));
+$my_data_service->reply();
+?>
More information about the Ds-java-dev
mailing list