2011-06-16 18 views
11

मैं PHP अपवाद हैंडलिंग और सोप करने के लिए नया हूँ। किसी कारण से मैं साबुनफॉल्ट नहीं पकड़ सकता। मुझे नहीं पता क्यों। साबुन सर्वर मेरा नहीं है।पीएचपी अपवाद संचालकों द्वारा पकड़ा नहीं SoapFault

try { 
    $contact_id = $objSoapClient->getContactIdFromVisitorId('12345'); 
} 
catch (SoapFault $sf) { 
    echo "Soapfault"; 
} 
catch (Exception $e) { 
    echo "Exception"; 
} 

मैं जानबूझ कर खराब आईडी 12345 में से गुजर रहा हूँ जब मैं त्रुटियों मैं निम्न संदेश SoapFault exception: [SOAP-ENV:Client] Invalid Visitor ID देखने के लिए सक्षम है। हालांकि, मेरा पकड़ साबुनफॉल्ट ब्लॉक और न ही मेरा पकड़ अपवाद ब्लॉक कभी हिट हो जाता है। क्यूं कर?

+0

क्या आपका कार्य प्राप्त होता है CONTactIdFromVisitorId अपवाद फेंक रहा है? –

+0

मैं इतना मान के बाद से मैं मैं अपने प्रश्न '[सोप-ENV: ग्राहक] के अंत में शामिल SoapFault अपवाद त्रुटि संदेश दिखाई जब मैं त्रुटियों सक्षम अमान्य आगंतुक ID' – mrtsherman

+0

मैं वेब सेवा एक वास्तविक लौटने प्रतीत होता है कि जोड़ देगा SoapFault चर '$ contact_id' – mrtsherman

उत्तर

17

समस्या निकला मेरी SoapClient घोषणा किया जाना है। अपवादों को ट्रिगर करने के लिए एक अपवाद पैरामीटर सेट किया जाना चाहिए।

$objSoapClient = new SoapClient('https://mywebservice.com/foo.wsdl', array(
    "trace" => false, 
    "exceptions" => true,  // <-------------- This!!!            
    'login' => 'username', //username 
    'password' => 'password', //password 
    'features' => SOAP_SINGLE_ELEMENT_ARRAYS + SOAP_USE_XSI_ARRAY_TYPE 
)); 
+0

इसके लिए धन्यवाद। यह मुझे भी मिल रहा था। अपवाद छिपाने के लिए डिफ़ॉल्ट व्यवहार क्यों होगा, मैं कल्पना नहीं कर सकता। – Ben

24

कोड आपके द्वारा सबमिट किए सही प्रतीत होता है। यहां एकमात्र चीज है जो मेरे दिमाग में आती है।

इसके साथ, यदि कोड एक कक्षा के अंदर स्थित है जो नामस्थान को परिभाषित करता है, तो आप कोड काम नहीं करेंगे क्योंकि यह अपवाद को \ namespace \ Exception के रूप में संदर्भित करने का प्रयास करेगा जो मौजूद नहीं है। "निष्क्रिय" इस तरह के catch खंड या instanceof भाव में उन लोगों के रूप में संदर्भ की अनुमति दी जाती है क्योंकि लापता वर्ग बाद में लोड किया जा सकता है।

यह काम करने के लिए के लिए, आप (यानी \ अपवाद) एक स्लैश के साथ वर्ग के नाम उपसर्ग के लिए वैश्विक अंतरिक्ष से पीएचपी उपयोग करने के लिए पीएचपी बताने के लिए है (या रूट यदि आप यह है कि कॉल करना चाहते हैं) (PHP) के रूप में विरोध किया आपके नामस्थान में; http://php.net/manual/en/language.namespaces.php:

<?php 

namespace test; 

class Foo 
{ 
    public function bar() 
    { 
    try 
    { 
     something_that_might_break(); 
    } 
    catch (\Exception $e) 
    { 
     // this will work 
    } 
    } 
} 

?> 

आप यहाँ नामस्थान के बारे में जानकारी के बहुत सारे पा सकते हैं।

+0

पर आपत्ति यही कारण मेरी साबुन अपवाद ध्यान में न आया जा रहे थे था। धन्यवाद। – Xyon

+1

ड्रैट! नामस्थानों द्वारा फिर से फूला! मेरे पास जावा और स्थैतिक टाइपिंग के लिए एक नई-नई प्रशंसा है! – Chloe

संबंधित मुद्दे