aouriques
2007-12-27 14:31:12 UTC
Hello friends,
How can I return a Data Object to the client side?
I am using the SDO_DAS_XML to create the data object but I cannot send
to the client the correct object.
I have tried this example (and a lot others):
http://www.ibm.com/developerworks/web/library/ws-soa-scasdo/index.html
My service file:
<?php
include "SCA/SCA.php";
/**
* @service
* @binding.soap
*
* @location http://mydomain.com/SOA/Weather/WeatherService.php
* @types http://Weather http://mydomain.com/SOA/Weather/AreasTypes.xsd
* @types http://Weather http://mydomain.com/SOA/Weather/TemperaturesTypes.xsd
*/
class WeatherService {
/**
* @param Areas $Areas http://Weather
* @return Temperatures http://Weather
*/
public function getTemperature($Areas) {
$Temperatures = SCA::createDataObject('http://Weather',
'Temperatures');
$Pair = $Temperatures->createDataObject('entry');
$Pair->state = 'CA';
$Pair->temperature = 65;
$Pair = $Temperatures->createDataObject('entry');
$Pair->state = 'UT';
$Pair->temperature = 105;
$Pair = $Temperatures->createDataObject('entry');
$Pair->state = 'ND';
$Pair->temperature = -20;
return $Temperatures;
}
}
?>
My client file:
<?php
include "SCA/SCA.php";
$weather = SCA::getService('http://mydomain.com/SOA/Weather/
WeatherService.php');
$Areas = $weather->createDataObject('http://Weather','Areas');
$area = $Areas->createDataObject('area');
$area->state = 'CA';
$area = $Areas->createDataObject('area');
$area->state = 'UT';
$area = $Areas->createDataObject('area');
$area->state = 'ND';
$Temperatures = $weather->getTemperature($Areas);
echo "Received temperatures from Web service:<br>";
foreach($Temperatures->entry as $Pair)
echo $Pair->state . ": " . $Pair->temperature . "<br>";
?>
The AreasTypes.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://Weather" elementFormDefault="qualified">
<complexType name="StateType">
<sequence>
<element name="state" type="string"/>
</sequence>
</complexType>
<element name="Areas">
<complexType>
<sequence>
<element name="area" type="ns1:StateType" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
</schema>
The TemperaturesTypes.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://Weather" elementFormDefault="qualified">
<complexType name="PairType">
<sequence>
<element name="state" type="string"/>
<element name="temperature" type="float"/>
</sequence>
</complexType>
<element name="Temperatures">
<complexType>
<sequence>
<element name="entry" type="ns1:PairType" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
</schema>
The WSDL file:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:tns2="http://WeatherService"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://
schemas.xmlsoap.org/wsdl/soap/" xmlns:xsi="http://www.w3.org/2001/
XMLSchema-instance" targetNamespace="http://WeatherService">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ns0="http://Weather"
xmlns:ns1="http://Weather"
targetNamespace="http://WeatherService"
elementFormDefault="qualified">
<xs:import schemaLocation="http://mydomain.com/SOA/Weather/
AreasTypes.xsd" namespace="http://Weather"/>
<xs:import schemaLocation="http://mydomain.com/SOA/Weather/
TemperaturesTypes.xsd" namespace="http://Weather"/>
<xs:element name="getTemperature">
<xs:complexType>
<xs:sequence>
<xs:element name="Areas" type="ns1:Areas"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getTemperatureResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="getTemperatureReturn"
type="ns1:Temperatures"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="getTemperatureRequest">
<wsdl:part name="getTemperatureRequest"
element="tns2:getTemperature"/>
</wsdl:message>
<wsdl:message name="getTemperatureResponse">
<wsdl:part name="return" element="tns2:getTemperatureResponse"/>
</wsdl:message>
<wsdl:portType name="WeatherServicePortType">
<wsdl:operation name="getTemperature">
<wsdl:input message="tns2:getTemperatureRequest"/>
<wsdl:output message="tns2:getTemperatureResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="WeatherServiceBinding"
type="tns2:WeatherServicePortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"/>
<wsdl:operation name="getTemperature">
<soap:operation soapAction=""/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="WeatherServiceService">
<wsdl:port name="WeatherServicePort"
binding="tns2:WeatherServiceBinding">
<soap:address location="http://mydomain.com/SOA/Weather/
WeatherService.php"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
<!-- this line identifies this file as WSDL generated by SCA for PHP.
Do not remove -->
Can you tell me what I am doing wrong?
The next question is: How can I create a dynamic data object returning
to the client a list of some information?
Thank you guys!
How can I return a Data Object to the client side?
I am using the SDO_DAS_XML to create the data object but I cannot send
to the client the correct object.
I have tried this example (and a lot others):
http://www.ibm.com/developerworks/web/library/ws-soa-scasdo/index.html
My service file:
<?php
include "SCA/SCA.php";
/**
* @service
* @binding.soap
*
* @location http://mydomain.com/SOA/Weather/WeatherService.php
* @types http://Weather http://mydomain.com/SOA/Weather/AreasTypes.xsd
* @types http://Weather http://mydomain.com/SOA/Weather/TemperaturesTypes.xsd
*/
class WeatherService {
/**
* @param Areas $Areas http://Weather
* @return Temperatures http://Weather
*/
public function getTemperature($Areas) {
$Temperatures = SCA::createDataObject('http://Weather',
'Temperatures');
$Pair = $Temperatures->createDataObject('entry');
$Pair->state = 'CA';
$Pair->temperature = 65;
$Pair = $Temperatures->createDataObject('entry');
$Pair->state = 'UT';
$Pair->temperature = 105;
$Pair = $Temperatures->createDataObject('entry');
$Pair->state = 'ND';
$Pair->temperature = -20;
return $Temperatures;
}
}
?>
My client file:
<?php
include "SCA/SCA.php";
$weather = SCA::getService('http://mydomain.com/SOA/Weather/
WeatherService.php');
$Areas = $weather->createDataObject('http://Weather','Areas');
$area = $Areas->createDataObject('area');
$area->state = 'CA';
$area = $Areas->createDataObject('area');
$area->state = 'UT';
$area = $Areas->createDataObject('area');
$area->state = 'ND';
$Temperatures = $weather->getTemperature($Areas);
echo "Received temperatures from Web service:<br>";
foreach($Temperatures->entry as $Pair)
echo $Pair->state . ": " . $Pair->temperature . "<br>";
?>
The AreasTypes.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://Weather" elementFormDefault="qualified">
<complexType name="StateType">
<sequence>
<element name="state" type="string"/>
</sequence>
</complexType>
<element name="Areas">
<complexType>
<sequence>
<element name="area" type="ns1:StateType" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
</schema>
The TemperaturesTypes.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://Weather" elementFormDefault="qualified">
<complexType name="PairType">
<sequence>
<element name="state" type="string"/>
<element name="temperature" type="float"/>
</sequence>
</complexType>
<element name="Temperatures">
<complexType>
<sequence>
<element name="entry" type="ns1:PairType" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
</schema>
The WSDL file:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:tns2="http://WeatherService"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://
schemas.xmlsoap.org/wsdl/soap/" xmlns:xsi="http://www.w3.org/2001/
XMLSchema-instance" targetNamespace="http://WeatherService">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ns0="http://Weather"
xmlns:ns1="http://Weather"
targetNamespace="http://WeatherService"
elementFormDefault="qualified">
<xs:import schemaLocation="http://mydomain.com/SOA/Weather/
AreasTypes.xsd" namespace="http://Weather"/>
<xs:import schemaLocation="http://mydomain.com/SOA/Weather/
TemperaturesTypes.xsd" namespace="http://Weather"/>
<xs:element name="getTemperature">
<xs:complexType>
<xs:sequence>
<xs:element name="Areas" type="ns1:Areas"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getTemperatureResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="getTemperatureReturn"
type="ns1:Temperatures"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="getTemperatureRequest">
<wsdl:part name="getTemperatureRequest"
element="tns2:getTemperature"/>
</wsdl:message>
<wsdl:message name="getTemperatureResponse">
<wsdl:part name="return" element="tns2:getTemperatureResponse"/>
</wsdl:message>
<wsdl:portType name="WeatherServicePortType">
<wsdl:operation name="getTemperature">
<wsdl:input message="tns2:getTemperatureRequest"/>
<wsdl:output message="tns2:getTemperatureResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="WeatherServiceBinding"
type="tns2:WeatherServicePortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"/>
<wsdl:operation name="getTemperature">
<soap:operation soapAction=""/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="WeatherServiceService">
<wsdl:port name="WeatherServicePort"
binding="tns2:WeatherServiceBinding">
<soap:address location="http://mydomain.com/SOA/Weather/
WeatherService.php"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
<!-- this line identifies this file as WSDL generated by SCA for PHP.
Do not remove -->
Can you tell me what I am doing wrong?
The next question is: How can I create a dynamic data object returning
to the client a list of some information?
Thank you guys!