Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour, je tente de mettre en place un WebService SOAP via le component SOAP de ZF2 (2.2.7).
contexte :
- prise de Zend Framework v2.2.7 de base sans aucun module externe installé
- création d'un modue MySOAP qui va tout héberger
- module config.php :
<?php
return array(
'controllers' => array(
'invokables' => array(
'MySOAP\Controller\Index' => 'MySOAP\Controller\IndexController',
),
),
// The following section is new and should be added to your file
'router' => array(
'routes' => array(
'album' => array(
'type' => 'segment',
'options' => array(
'route' => '/mysoap[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'MySOAP\Controller\Index',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'album' => __DIR__ . '/../view',
),
),
);
- création dans MySOAP/src/MySOAP/Services/service.API.php de la classe suivante :
<?php
namespace MySOAP\Services;
class servicesAPI {
public function uploadFile($encoded, $name) {
$location = ".\uploads\\" . $name;
$current = str_replace(" ", "_", file_get_contents($location));
$current = base64_decode($encoded);
file_put_contents($location, $current);
if ($name != "") {
return "File Uploaded successfully...";
} else {
return "Please upload a file...";
}
}
}
- dans MySOAP/src/MySOAP/Controller/IndexController.php
public function soapAction() {
// initialize server and set URI
$server = new Server(null,
array('uri' => 'http://localhost/ZF2Services/mysoap/wsdl'));
// set SOAP service class
$server->setClass(new servicesAPI());
// handle request
$server->setReturnResponse(true);
$server->handle($this->request);
return $this->getResponse();
}
public function wsdlAction() {
// set up WSDL auto-discovery
$wsdl = new AutoDiscover();
// attach SOAP service class
$wsdl->setClass(new servicesAPI());
// set SOAP action URI
$wsdl->setUri('http://localhost/ZF2Services/mysoap/soap');
$wsdl->generate();
$wsdl->dump("./wdls.xml");
// handle request
$wsdl->handle();
return $this->getResponse();
}
public function clientAction() {
$url = 'http://localhost/ZF2Services/mysoap/wsdl';
if(sizeof($_POST)!= 0) {
if(isset($_POST['submit'])) {
$tmpfile = $_FILES["uploadfiles"]["tmp_name"];
$filename = $_FILES["uploadfiles"]["name"];
$handle = fopen($tmpfile, "r");
$content = fread($handle, filesize($tmpfile));
fclose($handle);
$decodeContent = base64_encode($content);
}
$client = new Client($url) or die("Error1");
$response = $client->call('upload_file', array($decodeContent, $filename)) or die("Error2");
if ($client->fault) {
echo "Fault {$client->faultcode} <br />";
echo "String {$client->faultstring} <br />";
} else {
print_r($response);
}
return $this->getResponse();
} else {
return new ViewModel();
}
}
dans MySOAP/view/my_soap/index/client.phtml
<form name="name1" method="post" action="" enctype="multipart/form-data">
<input type="file" name="uploadfiles"><br />
<input type="submit" name="submit" value="uploadSubmit"><br />
</form>
exécution :
-> http://localhost/ZF2Services/public/mysoap/wsdl renvoi le fichier WSDL de définition du service
-> http://localhost/ZF2Services/public/mysoap/soap renvoi une page vide (sans source)
-> http://localhost/ZF2Services/public/mysoap/client en premier renvoi le formulaire de choix de fichier à uploader, puis quand je demande l'upload => SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://localhost/ZF2Services/mysoap/wsdl' : failed to load external entity "http://localhost/ZF2Services/mysoap/wsdl"
au vu de mon code, je ne comprends plus ce qui cloche. Je suis sous WAMP (Php 5.5.12)
Si quelqu'un a une idée, merci d'avance. Je suis bloqué et n'y comprends plus rien.
Celtic34FR
Dernière modification par Orkin (29-07-2014 14:30:46)
Hors ligne
Hello,
désolé pour le retard de ma réponse, tu a sans doute trouvé la solution à ton problème
En effet l'url que tu essai de load n'est pas valide : http://localhost/ZF2Services/public/mysoap/wsdl
(tu a oublié un petit public )
Hors ligne
Salut,
cela ne venait pas de l'URL, mais pire, mon application génère des caractères en début de fichier en sortie, résultat l'XML est considéré comme en erreur sans l'être.
=> j'ai du passer par les fonction Php ob_clean / ob_start, ... pour vider le buffer de la sortie standard avant de lancer l'écho envoyant l'XML (wsdl) et comme cela, c'est OK
sutout j'ai pu tester avec SoapUI mon service pour le mettre au point plus facilement. Ce soft existe pour Windows & Linux, le pied pour bien débugger, info à faire passer.
Merci pour ton aide.
Hors ligne
la question est résolue, mais je ne trouve pas comment passer le sujet à [Résolu]
Hors ligne
Salut, renomme juste ton titre en éditant ton premier message et met [Résolu] devant
Hors ligne
Pages: 1