From ecffdc18fd274dec31d38fae9033b894b9708daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Bechyn=C4=9B?= Date: Wed, 10 May 2017 09:15:27 +0200 Subject: [PATCH] Minor bugfixes of SoapFault handling SoapFault is now properly prefixed so that SoapFaultSourceGetter identifies them correctly, missing exceptions option is now processed in SoapServer --- src/BeSimple/SoapClient/SoapClient.php | 4 +- .../SoapCommon/Fault/SoapFaultEnum.php | 6 +- .../Fault/SoapFaultSourceGetter.php | 8 +-- .../SoapOptions/SoapServerOptions.php | 1 + .../Fault/SoapFaultSourceGetterTest.php | 64 +++++++++++++++++++ ...apServerAndSoapClientCommunicationTest.php | 1 - 6 files changed, 74 insertions(+), 10 deletions(-) create mode 100644 tests/BeSimple/SoapCommon/Fault/SoapFaultSourceGetterTest.php diff --git a/src/BeSimple/SoapClient/SoapClient.php b/src/BeSimple/SoapClient/SoapClient.php index 17a8ea9..e80bf7a 100644 --- a/src/BeSimple/SoapClient/SoapClient.php +++ b/src/BeSimple/SoapClient/SoapClient.php @@ -318,14 +318,14 @@ class SoapClient extends \SoapClient } else if ($curlResponse->curlStatusFailed()) { return $this->throwSoapFaultByTracing( - SoapFaultPrefixEnum::PREFIX_DEFAULT.'-'.SoapFaultEnum::SOAP_FAULT_HTTP.'-'.$curlResponse->getHttpResponseStatusCode(), + SoapFaultEnum::SOAP_FAULT_HTTP.'-'.$curlResponse->getHttpResponseStatusCode(), $curlResponse->getCurlErrorMessage(), $soapResponseTracingData ); } else { return $this->throwSoapFaultByTracing( - SoapFaultPrefixEnum::PREFIX_DEFAULT.'-'.SoapFaultEnum::SOAP_FAULT_SOAP_CLIENT_ERROR, + SoapFaultEnum::SOAP_FAULT_SOAP_CLIENT_ERROR, 'Cannot process curl response with unresolved status: ' . $curlResponse->getCurlStatus(), $soapResponseTracingData ); diff --git a/src/BeSimple/SoapCommon/Fault/SoapFaultEnum.php b/src/BeSimple/SoapCommon/Fault/SoapFaultEnum.php index 3cc630f..1428513 100644 --- a/src/BeSimple/SoapCommon/Fault/SoapFaultEnum.php +++ b/src/BeSimple/SoapCommon/Fault/SoapFaultEnum.php @@ -4,7 +4,7 @@ namespace BeSimple\SoapCommon\Fault; class SoapFaultEnum { - const SOAP_FAULT_WSDL = 'wsdl'; - const SOAP_FAULT_HTTP = 'http'; - const SOAP_FAULT_SOAP_CLIENT_ERROR = 'soap-client-error'; + const SOAP_FAULT_WSDL = SoapFaultPrefixEnum::PREFIX_DEFAULT.'-'.'wsdl'; + const SOAP_FAULT_HTTP = SoapFaultPrefixEnum::PREFIX_DEFAULT.'-'.'http'; + const SOAP_FAULT_SOAP_CLIENT_ERROR = SoapFaultPrefixEnum::PREFIX_DEFAULT.'-'.'soap-client-error'; } diff --git a/src/BeSimple/SoapCommon/Fault/SoapFaultSourceGetter.php b/src/BeSimple/SoapCommon/Fault/SoapFaultSourceGetter.php index eebd917..c0967f3 100644 --- a/src/BeSimple/SoapCommon/Fault/SoapFaultSourceGetter.php +++ b/src/BeSimple/SoapCommon/Fault/SoapFaultSourceGetter.php @@ -13,13 +13,13 @@ class SoapFaultSourceGetter public static function isBeSimpleSoapFault(SoapFault $soapFault) { - $defaultPrefix = SoapFaultPrefixEnum::PREFIX_DEFAULT; + $nativeSoapFaultPrefix = SoapFaultPrefixEnum::PREFIX_DEFAULT.'-'; - if (strpos($soapFault->getCode(), $defaultPrefix) === 0) { + if (strpos($soapFault->faultcode, $nativeSoapFaultPrefix) === 0) { - return false; + return true; } - return true; + return false; } } diff --git a/src/BeSimple/SoapServer/SoapOptions/SoapServerOptions.php b/src/BeSimple/SoapServer/SoapOptions/SoapServerOptions.php index 805d306..e36b858 100644 --- a/src/BeSimple/SoapServer/SoapOptions/SoapServerOptions.php +++ b/src/BeSimple/SoapServer/SoapOptions/SoapServerOptions.php @@ -121,6 +121,7 @@ class SoapServerOptions { $optionsAsArray = [ 'keep_alive' => $this->isKeepAlive(), + 'exceptions' => $this->isExceptions(), ]; return $optionsAsArray; diff --git a/tests/BeSimple/SoapCommon/Fault/SoapFaultSourceGetterTest.php b/tests/BeSimple/SoapCommon/Fault/SoapFaultSourceGetterTest.php new file mode 100644 index 0000000..dfed3fd --- /dev/null +++ b/tests/BeSimple/SoapCommon/Fault/SoapFaultSourceGetterTest.php @@ -0,0 +1,64 @@ +getNativeSoapFaultFromClient()], + // @todo: add more test cases for Soap Server \SoapFault + ]; + } + + public function provideBeSimpleSoapFaults() + { + return [ + [new SoapFault(SoapFaultEnum::SOAP_FAULT_HTTP, 'HTTP Connection error')], + [new SoapFault(SoapFaultEnum::SOAP_FAULT_SOAP_CLIENT_ERROR, 'SOAP Client error')], + [new SoapFault(SoapFaultEnum::SOAP_FAULT_WSDL, 'WSDL error')], + ]; + } + + /** + * @return SoapFault + */ + private function getNativeSoapFaultFromClient() + { + try { + $soapClient = @new \SoapClient('non-existing-wsdl-throwing-soapfault'); + $soapClient->__call('no-function', []); + } catch (SoapFault $e) { + + return $e; + } + + self::fail('Cannot generate native PHP SoapFault from Client, please review the test'); + } +} diff --git a/tests/BeSimple/SoapServerAndSoapClientCommunicationTest.php b/tests/BeSimple/SoapServerAndSoapClientCommunicationTest.php index d2e476b..d4404b9 100644 --- a/tests/BeSimple/SoapServerAndSoapClientCommunicationTest.php +++ b/tests/BeSimple/SoapServerAndSoapClientCommunicationTest.php @@ -24,7 +24,6 @@ class SoapServerAndSoapClientCommunicationTest extends PHPUnit_Framework_TestCas const CACHE_DIR = __DIR__ . '/../../cache'; const FIXTURES_DIR = __DIR__ . '/../Fixtures'; const TEST_HTTP_URL = 'http://localhost:8000/tests'; - const TEST_LOCAL_WSDL_UK = SoapClientBuilderTest::TEST_LOCAL_WSDL_UK; const LARGE_SWA_FILE = self::FIXTURES_DIR.'/large-test-file.docx'; private $localWebServerProcess;