Completed
Push — master ( 9aa566...61ed88 )
by Asmir
30:54
created

ClientFactory::setHeaderHandler()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
namespace GoetasWebservices\SoapServices\SoapClient;
3
4
use GoetasWebservices\SoapServices\SoapClient\Arguments\Headers\Handler\HeaderHandler;
5
use GoetasWebservices\SoapServices\SoapCommon\Metadata\PhpMetadataGenerator;
6
use GoetasWebservices\SoapServices\SoapCommon\Metadata\PhpMetadataGeneratorInterface;
7
use GoetasWebservices\XML\WSDLReader\Exception\PortNotFoundException;
8
use GoetasWebservices\XML\WSDLReader\Exception\ServiceNotFoundException;
9
use Http\Client\HttpClient;
10
use Http\Discovery\HttpClientDiscovery;
11
use Http\Discovery\MessageFactoryDiscovery;
12
use Http\Message\MessageFactory;
13
use JMS\Serializer\SerializerInterface;
14
15
class ClientFactory
16
{
17
    protected $namespaces = [];
18
    protected $metadata = [];
19
    /**
20
     * @var SerializerInterface
21
     */
22
    protected $serializer;
23
    /**
24
     * @var MessageFactory
25
     */
26
    protected $messageFactory;
27
28
    /**
29
     * @var HttpClient
30
     */
31
    protected $httpClient;
32
33
    /**
34
     * @var PhpMetadataGeneratorInterface
35
     */
36
    private $generator;
37
38
    private $unwrap = false;
39 16
40
    /**
41 16
     * @var HeaderHandler
42
     */
43 16
    private $headerHandler;
44 16
45 16
    public function __construct(array $namespaces, SerializerInterface $serializer)
46 16
    {
47
        $this->setSerializer($serializer);
48
49
        foreach ($namespaces as $namespace => $phpNamespace) {
50
            $this->addNamespace($namespace, $phpNamespace);
51
        }
52
    }
53 12
54
    public function setHeaderHandler(HeaderHandler $headerHandler)
55 12
    {
56 12
        $this->headerHandler = $headerHandler;
57
    }
58
59
    public function setUnwrapResponses($unwrap)
60
    {
61
        $this->unwrap = !!$unwrap;
62
    }
63
64
    public function setHttpClient(HttpClient $client)
65
    {
66 16
        $this->httpClient = $client;
67
    }
68 16
69 16
    /**
70
     * @param MessageFactory $messageFactory
71 16
     */
72
    public function setMessageFactory(MessageFactory $messageFactory)
73 16
    {
74 16
        $this->messageFactory = $messageFactory;
75
    }
76 16
77
    public function setSerializer(SerializerInterface $serializer)
78 16
    {
79
        $this->serializer = $serializer;
80 16
    }
81 16
82 16
    public function setMetadataGenerator(PhpMetadataGeneratorInterface $generator)
83
    {
84 16
        $this->generator = $generator;
85 16
    }
86
87 16
    private function getSoapService($wsdl, $portName = null, $serviceName = null)
88
    {
89
        $generator = $this->generator ?: new PhpMetadataGenerator();
90 16
91
        foreach ($this->namespaces as $ns => $phpNs) {
92 16
            $generator->addNamespace($ns, $phpNs);
93 16
        }
94
95
        $services = $generator->generateServices($wsdl);
96
        $service = $this->getService($serviceName, $services);
97
98
        return $this->getPort($portName, $service);
99
    }
100
101
    public function addNamespace($uri, $phpNs)
102 16
    {
103
        $this->namespaces[$uri] = $phpNs;
104 16
    }
105
106 14
    /**
107 14
     * @param string $wsdl
108 14
     * @param null|string $portName
109
     * @param null|string $serviceName
110 14
     * @param null|bool $unwrap
111
     * @return Client
112
     */
113
    public function getClient($wsdl, $portName = null, $serviceName = null, $unwrap = null)
114
    {
115
        $service = $this->getSoapService($wsdl, $portName, $serviceName);
116
117
        $this->httpClient = $this->httpClient ?: HttpClientDiscovery::find();
118
        $this->messageFactory = $this->messageFactory ?: MessageFactoryDiscovery::find();
119 16
        $headerHandler = $this->headerHandler ?: new HeaderHandler();
120
        $unwrap = is_null($unwrap) ? $this->unwrap : $unwrap;
121 16
122 1
        return new Client($service, $this->serializer, $this->messageFactory, $this->httpClient, $headerHandler, $unwrap);
0 ignored issues
show
Compatibility introduced by
$this->serializer of type object<JMS\Serializer\SerializerInterface> is not a sub-type of object<JMS\Serializer\Serializer>. It seems like you assume a concrete implementation of the interface JMS\Serializer\SerializerInterface to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
123 15
    }
124
125
    /**
126 15
     * @param $serviceName
127
     * @param array $services
128
     * @return array
129
     * @throws ServiceNotFoundException
130
     */
131
    private function getService($serviceName, array $services)
132
    {
133
        if ($serviceName && isset($services[$serviceName])) {
134
            return $services[$serviceName];
135
        } elseif ($serviceName) {
136 16
            throw new ServiceNotFoundException("The service named $serviceName can not be found");
137
        } else {
138 16
            return reset($services);
139 1
        }
140 15
    }
141 2
142
    /**
143 13
     * @param string $portName
144
     * @param array $service
145
     * @return array
146
     * @throws PortNotFoundException
147
     */
148
    private function getPort($portName, array $service)
149
    {
150
        if ($portName && isset($service[$portName])) {
151
            return $service[$portName];
152
        } elseif ($portName) {
153
            throw new PortNotFoundException("The port named $portName can not be found");
154
        } else {
155
            return reset($service);
156
        }
157
    }
158
}
159