Skip to content

Commit a7513d9

Browse files
committed
Use api-clients/xml for XML en/decoding
1 parent 4c3a002 commit a7513d9

File tree

6 files changed

+139
-22
lines changed

6 files changed

+139
-22
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"php": "^7.0",
1313
"api-clients/middleware": "^4.0",
1414
"api-clients/transport": "^3.1",
15-
"openlss/lib-array2xml": "^0.5.1",
15+
"api-clients/xml": "dev-master",
1616
"ringcentral/psr7": "^1.2"
1717
},
1818
"require-dev": {

composer.lock

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

src/XmlDecodeMiddleware.php

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
use ApiClients\Foundation\Middleware\ErrorTrait;
77
use ApiClients\Foundation\Middleware\MiddlewareInterface;
88
use ApiClients\Foundation\Middleware\PreTrait;
9+
use ApiClients\Tools\Xml\XmlDecodeService;
910
use GuzzleHttp\Psr7\BufferStream;
10-
use LSS\XML2Array;
1111
use Psr\Http\Message\ResponseInterface;
1212
use React\Promise\CancellablePromiseInterface;
1313
use React\Stream\ReadableStreamInterface;
@@ -18,6 +18,19 @@ class XmlDecodeMiddleware implements MiddlewareInterface
1818
use PreTrait;
1919
use ErrorTrait;
2020

21+
/**
22+
* @var XmlDecodeService
23+
*/
24+
private $xmlDecodeService;
25+
26+
/**
27+
* @param XmlDecodeService $xmlDecodeService
28+
*/
29+
public function __construct(XmlDecodeService $xmlDecodeService)
30+
{
31+
$this->xmlDecodeService = $xmlDecodeService;
32+
}
33+
2134
/**
2235
* @param ResponseInterface $response
2336
* @param array $options
@@ -52,9 +65,8 @@ public function post(
5265
return resolve($response->withBody($stream));
5366
}
5467

55-
$xml = XML2Array::createArray($body);
56-
$body = new XmlStream($xml);
57-
58-
return resolve($response->withBody($body));
68+
return $this->xmlDecodeService->decode($body)->then(function (array $xml) use ($response) {
69+
return resolve($response->withBody(new XmlStream($xml)));
70+
});
5971
}
6072
}

src/XmlEncodeMiddleware.php

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use ApiClients\Foundation\Middleware\MiddlewareInterface;
88
use ApiClients\Foundation\Middleware\PostTrait;
99
use ApiClients\Foundation\Transport\ParsedContentsInterface;
10-
use LSS\Array2XML;
10+
use ApiClients\Tools\Xml\XmlEncodeService;
1111
use Psr\Http\Message\RequestInterface;
1212
use React\Promise\CancellablePromiseInterface;
1313
use RingCentral\Psr7\BufferStream;
@@ -18,6 +18,19 @@ class XmlEncodeMiddleware implements MiddlewareInterface
1818
use PostTrait;
1919
use ErrorTrait;
2020

21+
/**
22+
* @var XmlEncodeService
23+
*/
24+
private $xmlEncodeService;
25+
26+
/**
27+
* @param XmlEncodeService $xmlEncodeService
28+
*/
29+
public function __construct(XmlEncodeService $xmlEncodeService)
30+
{
31+
$this->xmlEncodeService = $xmlEncodeService;
32+
}
33+
2134
/**
2235
* @param RequestInterface $request
2336
* @param array $options
@@ -35,11 +48,11 @@ public function pre(
3548
return resolve($request);
3649
}
3750

38-
$key = key($body->getParsedContents());
39-
$xml = Array2XML::createXML($key, $body->getParsedContents()[$key])->saveXML();
40-
$body = new BufferStream(strlen($xml));
41-
$body->write($xml);
51+
return $this->xmlEncodeService->encode($body->getParsedContents())->then(function (string $xml) use ($request) {
52+
$body = new BufferStream(strlen($xml));
53+
$body->write($xml);
4254

43-
return resolve($request->withBody($body)->withAddedHeader('Content-Type', 'text/xml'));
55+
return resolve($request->withBody($body)->withAddedHeader('Content-Type', 'text/xml'));
56+
});
4457
}
4558
}

tests/XmlDecodeMiddlewareTest.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use ApiClients\Middleware\Xml\XmlDecodeMiddleware;
77
use ApiClients\Middleware\Xml\XmlStream;
88
use ApiClients\Tools\TestUtilities\TestCase;
9+
use ApiClients\Tools\Xml\XmlDecodeService;
910
use React\EventLoop\Factory;
1011
use RingCentral\Psr7\Response;
1112
use function Clue\React\Block\await;
@@ -24,7 +25,7 @@ public function provideValidJsonContentTypes()
2425
public function testPost(string $contentType)
2526
{
2627
$loop = Factory::create();
27-
$middleware = new XmlDecodeMiddleware();
28+
$middleware = new XmlDecodeMiddleware(new XmlDecodeService($loop));
2829
$response = new Response(200, ['Content-Type' => $contentType], Constant::XML);
2930

3031
$body = await(
@@ -43,7 +44,7 @@ public function testPost(string $contentType)
4344
public function testPostNoContentType()
4445
{
4546
$loop = Factory::create();
46-
$middleware = new XmlDecodeMiddleware();
47+
$middleware = new XmlDecodeMiddleware(new XmlDecodeService($loop));
4748
$response = new Response(200, [], '[]');
4849

4950
self::assertSame(
@@ -58,7 +59,7 @@ public function testPostNoContentType()
5859
public function testPostNoContentTypeCheck()
5960
{
6061
$loop = Factory::create();
61-
$middleware = new XmlDecodeMiddleware();
62+
$middleware = new XmlDecodeMiddleware(new XmlDecodeService($loop));
6263
$response = new Response(200, [], Constant::XML);
6364

6465
$body = await(
@@ -85,7 +86,7 @@ public function testPostNoContentTypeCheck()
8586
public function testPostCustomTYpe()
8687
{
8788
$loop = Factory::create();
88-
$middleware = new XmlDecodeMiddleware();
89+
$middleware = new XmlDecodeMiddleware(new XmlDecodeService($loop));
8990
$response = new Response(200, ['Content-Type' => 'custom/type'], Constant::XML);
9091

9192
$body = await(
@@ -112,7 +113,7 @@ public function testPostCustomTYpe()
112113
public function testPostNoJson()
113114
{
114115
$loop = Factory::create();
115-
$middleware = new XmlDecodeMiddleware();
116+
$middleware = new XmlDecodeMiddleware(new XmlDecodeService($loop));
116117
$response = new Response(200, []);
117118

118119
self::assertSame(
@@ -127,7 +128,7 @@ public function testPostNoJson()
127128
public function testPostEmpty()
128129
{
129130
$loop = Factory::create();
130-
$middleware = new XmlDecodeMiddleware();
131+
$middleware = new XmlDecodeMiddleware(new XmlDecodeService($loop));
131132
$response = new Response(200, [], '');
132133

133134
self::assertSame(

tests/XmlEncodeMiddlewareTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use ApiClients\Middleware\Xml\XmlEncodeMiddleware;
66
use ApiClients\Middleware\Xml\XmlStream;
77
use ApiClients\Tools\TestUtilities\TestCase;
8+
use ApiClients\Tools\Xml\XmlEncodeService;
89
use React\EventLoop\Factory;
910
use RingCentral\Psr7\BufferStream;
1011
use RingCentral\Psr7\Request;
@@ -15,7 +16,7 @@ class XmlEncodeMiddlewareTest extends TestCase
1516
public function testPre()
1617
{
1718
$loop = Factory::create();
18-
$middleware = new XmlEncodeMiddleware();
19+
$middleware = new XmlEncodeMiddleware(new XmlEncodeService($loop));
1920
$stream = new XmlStream(Constant::TREE);
2021
$request = new Request('GET', 'https://example.com', [], $stream);
2122

@@ -31,7 +32,7 @@ public function testPre()
3132
public function testPreNoXml()
3233
{
3334
$loop = Factory::create();
34-
$middleware = new XmlEncodeMiddleware();
35+
$middleware = new XmlEncodeMiddleware(new XmlEncodeService($loop));
3536
$stream = new BufferStream(2);
3637
$stream->write('yo');
3738
$request = new Request('GET', 'https://example.com', [], $stream);

0 commit comments

Comments
 (0)