[Web Service] Namespace et WebServices
Bonjour,
Je souhaite créer un web service de création de compte en PHP
J'ai une classe entité Account (dans le namespace ATD_Sobul_Web_Entities), une classe de service AccountSrv (dans le namespace ATD_Sobul_Web_Services)
Voici le code de la classe Account :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
<?php
namespace ATD_Sobul_Web_Entities
{
class Account{
private $username = '';
private $name = '';
private $firstname = '';
private $birthdate = '';
private $city = '';
private $country = '';
function __construct() {
}
public function __get($attr) {
if(isset($this->$attr))
return $this->$attr;
else {
// non-existant property
echo 'GET:Unknow attribute '.$attr;
}
}
public function __set($attr,$value)
{
if(isset($this->$attr)) $this->$attr = $value;
else {
// non-existant property
echo 'SET:Unknow attribute '.$attr;
}
}
}
}
?> |
Voici le code de la classe AccountSrv
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
<?php
namespace ATD_Sobul_Web_Services
{
define('__ROOT__', $_SERVER['DOCUMENT_ROOT']);
require_once(__ROOT__.'/Entities/Account.php');
class AccountSrv{
function Create($account){
return $account->username;
}
function Activate($username, $key){
}
}
}
namespace {
$wsdl = tempnam(sys_get_temp_dir(), 'wsdl');
copy("http://127.0.0.3:8080/Services/AccountSrv.wsdl", $wsdl);
$server = new SoapServer($wsdl);
$server->setObject( new ATD_Sobul_Web_Services\AccountSrv());
$server->addFunction('Create');
$server->addFunction('Activate');
$server->handle();
}
?> |
Voici le WSDL qui va avec :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
<s:element name="Create">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="account" type="tns:Account" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="Account">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="username" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="name" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="firstname" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="birthdate" type="s:dateTime" />
<s:element minOccurs="0" maxOccurs="1" name="city" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="country" type="s:string" />
</s:sequence>
</s:complexType>
<s:element name="CreateResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="CreateResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="Activate">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="username" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="key" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ActivateResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="ActivateResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
<wsdl:message name="CreateSoapIn">
<wsdl:part name="parameters" element="tns:Create" />
</wsdl:message>
<wsdl:message name="CreateSoapOut">
<wsdl:part name="parameters" element="tns:CreateResponse" />
</wsdl:message>
<wsdl:message name="ActivateSoapIn">
<wsdl:part name="parameters" element="tns:Activate" />
</wsdl:message>
<wsdl:message name="ActivateSoapOut">
<wsdl:part name="parameters" element="tns:ActivateResponse" />
</wsdl:message>
<wsdl:portType name="AccountSrvSoap">
<wsdl:operation name="Create">
<wsdl:input message="tns:CreateSoapIn" />
<wsdl:output message="tns:CreateSoapOut" />
</wsdl:operation>
<wsdl:operation name="Activate">
<wsdl:input message="tns:ActivateSoapIn" />
<wsdl:output message="tns:ActivateSoapOut" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="AccountSrvSoap" type="tns:AccountSrvSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="Create">
<soap:operation soapAction="http://tempuri.org/Create" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Activate">
<soap:operation soapAction="http://tempuri.org/Activate" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="AccountSrv">
<wsdl:port name="AccountSrvSoap" binding="tns:AccountSrvSoap">
<soap:address location="http://127.0.0.3:8080/Services/AccountSrv.php" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions> |
Et enfin, voici le code de ma page de test qui appelle la methode Create du web service
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
<?php
define('__ROOT__', $_SERVER['DOCUMENT_ROOT']);
require_once(__ROOT__.'/Services/AccountSrv.php');
require_once(__ROOT__.'/Entities/Account.php');
$account = new ATD_Sobul_Web_Entities\Account();
$account->username = 'android';
$wsdl = tempnam(sys_get_temp_dir(), 'wsdl');
copy("http://127.0.0.3:8080/Services/AccountSrv.wsdl", $wsdl);
$service = new SoapClient($wsdl);
$response = $service->Create($account);
?> |
J'ai l'impression que les namespaces (ATD_Sobul_Web_Entities et ATD_Sobul_Web_Services) me mettent le bronx car j'ai le message suivant :
GET:Unknow attribute account
Pouvez-vous m'aider ?
Merci d'avance