Обработка сложных типов в PHP / WSDL - PullRequest
1 голос
/ 02 апреля 2011

Я использую perl и mySql чуть более суток и написал клиент / сервер PHP для базового веб-сервиса, который запрашивает базу данных и возвращает результаты клиенту. У меня есть некоторый опыт использования веб-сервисов java и JAX-WS.

Из-за отсутствия типизации обработка сложных типов совершенно иная, чем в JAX-WS, в том, что проверка типа не выполняется для возвращаемого или входного параметра. Сервер возвращает многомерный массив клиенту и все работает правильно.

Играя с WSDL, я заметил, что объявления типов не влияют, несмотря на то, что на них есть ссылка в элементе part элемента message. Я удалил всю декларацию типов, и программа продолжала корректно работать.

Я что-то упустил, есть ли в PHP какой-либо способ использовать WSDL для принудительного исполнения контракта веб-службы?

------- клиент ---------

<?php
// turn off the WSDL cache
ini_set("soap.wsdl_cache_enabled", "0");

$client = new SoapClient("http://localhost/~someuser/apams/apams.wsdl");

$fID = 1;

$franchises = $client->getFranchises($fID);
$rid= $franchises["Franchises"][1]["Id"];
$rdesc= $franchises["Franchises"][1]["Description"];

print("The id: $rid\n");
print("The description: $rdesc\n");

?>

--------- сервер -------------

<?php
function getFranchises($pfID) 
{
  $result = mysql_query("SELECT * FROM tbtest where franchiseID=$pfID");

while($row = mysql_fetch_array($result))
  {
  $rID=$row['franchiseID'];
  $rDesc=$row['franchisedDescription'];
  }
mysql_close($con);
  return array("Franchises" =>  array(1=> array("Id"=>$rID, "Description"=>$rDesc)) );
}

ini_set("soap.wsdl_cache_enabled", "0");

$server = new SoapServer('apams.wsdl');

$server->addFunction("getFranchises");

$con =mysql_connect("localhost","testuser","******");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

$db_selected=mysql_select_db("testdb", $con);
if (!$db_selected) {
    die ('Can\'t use testdb : ' . mysql_error());
}

$server->handle();
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...