From 1715ced51ef8e242762958f0115e0b7b657c6016 Mon Sep 17 00:00:00 2001 From: Pawel Gorski Date: Fri, 19 Jun 2026 12:42:18 +0200 Subject: [PATCH] Fix XML parser callbacks on PHP 8.4 --- src/Parser/XmlParser.php | 5 ++--- test/Parser/XmlTest.php | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/Parser/XmlParser.php b/src/Parser/XmlParser.php index 1ac7b8d773..761f9d0081 100644 --- a/src/Parser/XmlParser.php +++ b/src/Parser/XmlParser.php @@ -44,9 +44,8 @@ public function parse($xml) xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); - xml_set_object($parser, $this); - xml_set_element_handler($parser, 'startElement', 'endElement'); - xml_set_character_data_handler($parser, 'cdata'); + xml_set_element_handler($parser, [$this, 'startElement'], [$this, 'endElement']); + xml_set_character_data_handler($parser, [$this, 'cdata']); xml_parse($parser, $xml, true); diff --git a/test/Parser/XmlTest.php b/test/Parser/XmlTest.php index 1a9ab3c7ab..ea1c221f39 100644 --- a/test/Parser/XmlTest.php +++ b/test/Parser/XmlTest.php @@ -110,4 +110,27 @@ public function testCanParseXmlWithNamespace() $this->assertEquals('token type', $obj->tokenType->value); $this->assertEquals('uri type', $obj->uriType->value); } + + public function testCanParseXmlWithoutDeprecations() + { + set_error_handler(function ($severity, $message, $file, $line) { + if ($severity === E_DEPRECATED) { + throw new \ErrorException($message, 0, $severity, $file, $line); + } + + return false; + }); + + try { + $xmlParser = new XmlParser('\DTS\eBaySDK\Test\Mocks\ComplexClass'); + $xml = file_get_contents(__DIR__.'/../Mocks/Response.xml'); + $xml = preg_replace('/[\n\r]/', '', $xml); + $xml = preg_replace('/>\s+/', '>', $xml); + $obj = $xmlParser->parse($xml); + } finally { + restore_error_handler(); + } + + $this->assertInstanceOf('\DTS\eBaySDK\Test\Mocks\ComplexClass', $obj); + } }