From 289721d9af264b815ce925a2dcaee8bc90c976e4 Mon Sep 17 00:00:00 2001 From: Yasser Bal Date: Wed, 27 May 2026 21:30:04 +0200 Subject: [PATCH] FlatteningLoader| Throw UnloadableWsdlException when loader returns empty content --- src/Exception/UnloadableWsdlException.php | 5 +++++ src/Loader/FlatteningLoader.php | 13 +++++++------ tests/Unit/Loader/FlatteningLoaderTest.php | 13 +++++++++++++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/Exception/UnloadableWsdlException.php b/src/Exception/UnloadableWsdlException.php index c905520..0aa6dc9 100644 --- a/src/Exception/UnloadableWsdlException.php +++ b/src/Exception/UnloadableWsdlException.php @@ -23,4 +23,9 @@ public static function fromException(Exception $e): self { return new self($e->getMessage(), (int)$e->getCode(), $e); } + + public static function noContentAt(string $location): self + { + return new self('WSDL at location "'.$location.'" returned no content.'); + } } diff --git a/src/Loader/FlatteningLoader.php b/src/Loader/FlatteningLoader.php index dd3f9df..ccc2090 100644 --- a/src/Loader/FlatteningLoader.php +++ b/src/Loader/FlatteningLoader.php @@ -1,15 +1,14 @@ assert(($this->loader)($location)) - ); + $content = ($this->loader)($location); + if ($content === '') { + throw UnloadableWsdlException::noContentAt($location); + } + + $currentDoc = Document::fromXmlString($content); $context = FlatteningContext::forWsdl($location, $currentDoc, $this->loader); return (new Flattener())($location, $currentDoc, $context); diff --git a/tests/Unit/Loader/FlatteningLoaderTest.php b/tests/Unit/Loader/FlatteningLoaderTest.php index 2e64470..1638039 100644 --- a/tests/Unit/Loader/FlatteningLoaderTest.php +++ b/tests/Unit/Loader/FlatteningLoaderTest.php @@ -22,6 +22,19 @@ protected function setUp(): void $this->loader = new FlatteningLoader(new StreamWrapperLoader()); } + public function test_it_throws_when_content_is_empty(): void + { + $emptyLoader = new class implements WsdlLoader { + public function __invoke(string $location): string + { + return ''; + } + }; + $this->expectException(UnloadableWsdlException::class); + + (new FlatteningLoader($emptyLoader))('http://example.com/service.wsdl'); + } + #[DataProvider('provideTestCases')] public function test_it_can_load_flattened_imports(string $wsdl, Document $expected): void {