Skip to content

Commit b98f5d1

Browse files
committed
logs refactoring, fix unlock request handling
1 parent 6ffa53b commit b98f5d1

File tree

4 files changed

+87
-3
lines changed

4 files changed

+87
-3
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
namespace Hengebytes\SoapCoreAsyncBundle\Cache\Middleware\Response;
4+
5+
use Hengebytes\SoapCoreAsyncBundle\Handler\SoapAsyncRequestHandler;
6+
use Hengebytes\SoapCoreAsyncBundle\Request\SoapWSRequest;
7+
use Hengebytes\WebserviceCoreAsyncBundle\Cache\Middleware\Response\ReloadLockedResponseResponseModifier as BaseModifier;
8+
use Hengebytes\WebserviceCoreAsyncBundle\Callback\OnResponseReceivedCallback;
9+
use Hengebytes\WebserviceCoreAsyncBundle\Middleware\ResponseModificationInterface;
10+
use Hengebytes\WebserviceCoreAsyncBundle\Response\AsyncResponse;
11+
use Hengebytes\WebserviceCoreAsyncBundle\Response\ParsedResponse;
12+
use Symfony\Component\DependencyInjection\ContainerInterface;
13+
use Symfony\Component\DependencyInjection\Attribute\AsDecorator;
14+
use Symfony\Component\HttpFoundation\Response;
15+
16+
#[AsDecorator(decorates: BaseModifier::class, onInvalid: ContainerInterface::IGNORE_ON_INVALID_REFERENCE)]
17+
readonly class ReloadLockedResponseResponseModifier implements ResponseModificationInterface
18+
{
19+
public function __construct(
20+
#[AutowireDecorated]
21+
private ?BaseModifier $inner,
22+
private SoapAsyncRequestHandler $requestHandler,
23+
) {
24+
}
25+
26+
public function modify(AsyncResponse $response): void
27+
{
28+
if ($response->WSRequest instanceof SoapWSRequest) {
29+
$response->addOnResponseReceivedCallback(new OnResponseReceivedCallback(
30+
function (ParsedResponse $parsedResponse) {
31+
if (
32+
$parsedResponse->response
33+
|| $parsedResponse->headers
34+
|| $parsedResponse->mainAsyncResponse->WSResponse->getStatusCode() !== Response::HTTP_LOCKED
35+
) {
36+
return;
37+
}
38+
$parsedResponse->mainAsyncResponse->WSResponse = $this->requestHandler->request($parsedResponse->mainAsyncResponse->WSRequest)->WSResponse;
39+
}
40+
));
41+
42+
return;
43+
}
44+
45+
46+
$this->inner->modify($response);
47+
}
48+
49+
public function supports(AsyncResponse $response): bool
50+
{
51+
if (!$this->inner) {
52+
return false; // if original disabled - we assume lock mechanism is disabled as well
53+
}
54+
55+
return $this->inner->supports($response);
56+
}
57+
58+
public static function getPriority(): int
59+
{
60+
return BaseModifier::getPriority();
61+
}
62+
}

src/Handler/SoapAsyncRequestHandler.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Hengebytes\SoapCoreAsyncBundle\Handler;
44

55
use Hengebytes\SoapCoreAsyncBundle\Engine\AsyncEngineFactory;
6+
use Hengebytes\SoapCoreAsyncBundle\Request\SoapWSRequest;
67
use Hengebytes\WebserviceCoreAsyncBundle\Cache\CacheManager;
78
use Hengebytes\WebserviceCoreAsyncBundle\Handler\BaseRequestHandler;
89
use Hengebytes\WebserviceCoreAsyncBundle\Middleware\RequestModification;
@@ -29,13 +30,19 @@ public function __construct(
2930
*/
3031
protected function performRequest(WSRequest $request): ResponseInterface
3132
{
33+
if (!$request instanceof SoapWSRequest) {
34+
throw new \InvalidArgumentException(
35+
'SoapAsyncRequestHandler can only handle SoapWSRequest but got ' . get_class($request)
36+
);
37+
}
38+
3239
$requestOptions = $request->getOptions();
3340
$client = AsyncEngineFactory::createFromWSDL($requestOptions['base_uri'], $this->client);
3441

3542
[$req, $res] = $client->request(
3643
$request->action, $request->getRequestParams(), $requestOptions['headers'] ?? []
3744
);
38-
$request->setBody(['body' => $req->getRequest()]);
45+
$request->encodedRequest = $req->getRequest();
3946

4047
return $res;
4148
}

src/Request/SoapWSRequest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace Hengebytes\SoapCoreAsyncBundle\Request;
4+
5+
use Hengebytes\WebserviceCoreAsyncBundle\Request\WSRequest;
6+
7+
class SoapWSRequest extends WSRequest
8+
{
9+
public ?string $encodedRequest = null;
10+
11+
public function getLogString(): string
12+
{
13+
$logString = parent::getLogString();
14+
15+
return trim($logString . "\n\n" . $this->encodedRequest);
16+
}
17+
}

src/Resources/config/services.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,3 @@ services:
1111
- '../../Resources'
1212
- '../../Response'
1313
- '../../HBSoapCoreAsyncBundle.php'
14-
15-

0 commit comments

Comments
 (0)