2010-09-01 9 views
1

je le code PHP suivant sur une page Web:exception ne pas être pris

$wsdl_url = "someURL?wsdl"; 
try { 
    $client = new SoapClient($wsdl_url, array('login' => 'mylogin','password' => 'mypassword')); 
    $client->myWebMethod(); // <-- problem call 
} catch (Exception $e) { 
    echo "none"; 
} 

Il est un appel de base à un service Web. Le problème est que lorsqu'une erreur est lancée sur la ligne $client->myWebMethod(), echo "none" n'est pas imprimée. En fait, rien dans le bloc catch ne s'exécute. Par conséquent, je ne pense pas que l'exception soit prise.

Une erreur fatale est affichée sur la page Web.

Question: Des idées sur pourquoi cela se passe-t-il? Je m'attendais à ce que toutes les exceptions soient interceptées et traitées avec ce code. Mais ce que je reçois, c'est que l'erreur fatale est affichée sur la page. Peut-être que les services Web sont gérés différemment?

EDIT: l'erreur est qu'il manque un tas de paramètres requis. si j'ajoute les paramètres, l'appel fonctionne correctement. J'omets délibérément les paramètres pour obtenir l'erreur, donc je saurais comment la gérer.

L'erreur est quelque chose comme: Erreur fatale: SOAP ERREUR: Object n'a pas 'myparameter1'

Merci à l'avance.

+5

On dirait plutôt qu'une exception n'est pas * lancée *. Voyons le code de 'myWebMethod()'. – webbiedave

+3

Quelle est l'erreur fatale? –

+0

Pourquoi pensez-vous que ce code est erroné? –

Répondre

1

Malheureusement, il ne s'agit pas d'une erreur détectable.

Toutefois, vous pouvez vérifier si l'extension de savon est chargé avant d'essayer de instancier en appelant get_loaded_extensions avec quelque chose le long des lignes de:

if (in_array('soap', get_loaded_extensions())) { 
    // it's loaded! 
} 
+1

Pour clarifier la réponse de @ webbiedave, PHP a à la fois 'errors' et' exceptions'. Vous pouvez gérer les erreurs avec [un gestionnaire d'erreurs] (http://www.php.net/manual/fr/function.set-error-handler.php). – Josh

+0

Merci pour les commentaires, j'ai fait une édition et noté l'erreur que je recevais. l'extension de savon fonctionne bien. – kenzaraque

2

Je suis exactement le même problème, ce matin, lors de l'exécution d'un module personnalisé pour Drupal qui nécessitait un service Web SOAP externe. Pour être honnête, je ne sais pas très bien comment j'ai résolu le problème.

Il s'avère qu'il s'agissait d'effacer le cache de mon serveur Web qui avait à voir avec le WSDL respectif. Dans votre dossier tmp/ vous trouverez divers fichiers nommés wsdl-yourservice-etc. Supprimez-les et cela devrait être OK. Sinon, le problème réside dans le code et plus particulièrement dans la séquence et la syntaxe des arguments passés au WSDL.

J'espère avoir aidé.