Skip to content

Commit 8a52588

Browse files
committed
Refactor old XML implementation into new veewee/xml concepts
0 parents  commit 8a52588

11 files changed

+511
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/vendor/

composer.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"name": "php-soap/xml",
3+
"description": "XML wrappers for SOAP",
4+
"type": "library",
5+
"license": "MIT",
6+
"autoload": {
7+
"psr-4": {
8+
"Soap\\Xml\\": "src/"
9+
}
10+
},
11+
"authors": [
12+
{
13+
"name": "Toon Verwerft",
14+
"email": "toonverwerft@gmail.com"
15+
}
16+
],
17+
"require": {
18+
"php": "^8.0",
19+
"ext-dom": "*",
20+
"veewee/xml": "dev-master"
21+
}
22+
}

composer.lock

Lines changed: 293 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Builder/SoapHeaders.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace Soap\Xml\Builder;
4+
5+
use DOMElement;
6+
use DOMNode;
7+
use VeeWee\Xml\Dom\Builder\Builder;
8+
use function VeeWee\Xml\Dom\Builder\namespaced_element;
9+
use function VeeWee\Xml\Dom\Locator\Node\detect_document;
10+
11+
class SoapHeaders implements Builder
12+
{
13+
/**
14+
* @var callable(DOMNode): DOMElement
15+
*/
16+
private array $configurators;
17+
18+
/**
19+
* @param callable(DOMNode): DOMElement ...$configurators
20+
*/
21+
public function __construct(callable ... $configurators)
22+
{
23+
$this->configurators = $configurators;
24+
}
25+
26+
/**
27+
* @param DOMNode $node
28+
* @param callable(DOMElement): DOMElement ...$configurators
29+
*/
30+
public function __invoke(DOMNode $node): DOMNode
31+
{
32+
$document = detect_document($node);
33+
34+
return namespaced_element($document->namespaceURI, 'soap:Header', ...$this->configurators)($node);
35+
}
36+
}

src/Locator/BodyNamespaceLocator.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Soap\Xml\Locator;
6+
7+
use DOMDocument;
8+
9+
final class BodyNamespaceLocator
10+
{
11+
public function __invoke(DOMDocument $document): ?string
12+
{
13+
return (new SoapBodyLocator())($document)?->firstChild?->namespaceURI;
14+
}
15+
}

src/Locator/SoapBodyLocator.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Soap\Xml\Locator;
6+
7+
use DOMDocument;
8+
use DOMElement;
9+
use VeeWee\Xml\Dom\Document;
10+
use function VeeWee\Xml\Dom\Xpath\Configurator\namespaces;
11+
12+
final class SoapBodyLocator
13+
{
14+
public function __invoke(DOMDocument $document): ?DOMElement
15+
{
16+
$soapNs = $document->namespaceURI ?? '';
17+
$xpath = Document::fromUnsafeDocument($document)->xpath(namespaces(['soap' => $soapNs]));
18+
19+
return $xpath->query('//soap:Envelope/soap:Body')->first();
20+
}
21+
}

0 commit comments

Comments
 (0)