Skip to content

Commit ab1c148

Browse files
committed
Semi working XML middleware
1 parent d370e00 commit ab1c148

File tree

4 files changed

+87
-17
lines changed

4 files changed

+87
-17
lines changed

composer.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
"require": {
1212
"php": "^7.0",
1313
"api-clients/middleware": "^4.0",
14-
"ringcentral/psr7": "^1.2"
14+
"fillup/array2xml": "^0.5.1",
15+
"ringcentral/psr7": "^1.2",
16+
"verdant/xml2array": "dev-master#b518d755a305fb4249027d20f8e9042bb733b857"
1517
},
1618
"require-dev": {
1719
"api-clients/test-utilities": "^4.1"

composer.lock

+72-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/XmlDecodeMiddleware.php

+6-7
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
use ApiClients\Foundation\Middleware\ErrorTrait;
77
use ApiClients\Foundation\Middleware\MiddlewareInterface;
88
use ApiClients\Foundation\Middleware\PreTrait;
9-
use ApiClients\Tools\Json\JsonDecodeService;
109
use GuzzleHttp\Psr7\BufferStream;
1110
use Psr\Http\Message\ResponseInterface;
1211
use React\Promise\CancellablePromiseInterface;
1312
use React\Stream\ReadableStreamInterface;
13+
use Verdant\XML2Array;
1414
use function React\Promise\resolve;
1515

1616
class XmlDecodeMiddleware implements MiddlewareInterface
@@ -35,12 +35,12 @@ public function post(
3535
}
3636

3737
if (!isset($options[self::class]) &&
38-
strpos($response->getHeaderLine('Content-Type'), 'application/json') !== 0) {
38+
strpos($response->getHeaderLine('Content-Type'), 'text/xml') !== 0) {
3939
return resolve($response);
4040
}
4141

4242
if (isset($options[self::class][Options::CONTENT_TYPE]) &&
43-
$response->getHeaderLine('Content-Type') !== $options[self::class][Options::CONTENT_TYPE]) {
43+
$response->getHeaderLine('Content-Type') !== $options[self::class][Options::CONTENT_TYPE]) {
4444
return resolve($response);
4545
}
4646

@@ -51,9 +51,8 @@ public function post(
5151
return resolve($response->withBody($stream));
5252
}
5353

54-
return $this->decodeService->decode($body)->then(function ($json) use ($response) {
55-
$body = new XmlStream($json);
56-
return resolve($response->withBody($body));
57-
});
54+
$xml = XML2Array::createArray($body);
55+
$body = new XmlStream($xml);
56+
return resolve($response->withBody($body));
5857
}
5958
}

src/XmlEncodeMiddleware.php

+6-7
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use ApiClients\Foundation\Middleware\ErrorTrait;
77
use ApiClients\Foundation\Middleware\MiddlewareInterface;
88
use ApiClients\Foundation\Middleware\PostTrait;
9-
use ApiClients\Tools\Json\JsonEncodeService;
9+
use fillup\A2X;
1010
use Psr\Http\Message\RequestInterface;
1111
use React\Promise\CancellablePromiseInterface;
1212
use RingCentral\Psr7\BufferStream;
@@ -29,14 +29,13 @@ public function pre(
2929
string $transactionId,
3030
array $options = []
3131
): CancellablePromiseInterface {
32-
if (!($request->getBody() instanceof JsonStream)) {
32+
if (!($request->getBody() instanceof XmlStream)) {
3333
return resolve($request);
3434
}
3535

36-
return $this->encodeService->encode($request->getBody()->getJson())->then(function ($json) use ($request) {
37-
$body = new BufferStream(strlen($json));
38-
$body->write($json);
39-
return resolve($request->withBody($body)->withAddedHeader('Content-Type', 'application/json'));
40-
});
36+
$xml = (new A2X($request->getBody()->getXml()))->asXml();
37+
$body = new BufferStream(strlen($xml));
38+
$body->write($xml);
39+
return resolve($request->withBody($body)->withAddedHeader('Content-Type', 'text/xml'));
4140
}
4241
}

0 commit comments

Comments
 (0)