Added besimple.soap.response service
It is highly recommended not to instantiate BeSimple\SoapBundle\Soap\SoapResponse but to use the service besimple.soap.response Before: public function helloAction($name) { return new SoapResponse("Hello ".$name); } After: public function helloAction($name) { return $this ->container ->get('besimple.soap.response') ->setReturnValue("Hello ".$name) ; }
This commit is contained in:
parent
d4662ffe20
commit
b4da2f727e
|
@ -58,15 +58,15 @@ class SoapWebServiceController extends ContainerAware
|
||||||
$this->serviceBinder = $webServiceContext->getServiceBinder();
|
$this->serviceBinder = $webServiceContext->getServiceBinder();
|
||||||
|
|
||||||
$this->soapRequest = SoapRequest::createFromHttpRequest($this->container->get('request'));
|
$this->soapRequest = SoapRequest::createFromHttpRequest($this->container->get('request'));
|
||||||
$this->soapServer = $webServiceContext->getServerFactory()->create($this->soapRequest, new SoapResponse());
|
$this->soapServer = $webServiceContext->getServerFactory()->create($this->soapRequest, $this->getResponse());
|
||||||
|
|
||||||
$this->soapServer->setObject($this);
|
$this->soapServer->setObject($this);
|
||||||
|
|
||||||
ob_start();
|
ob_start();
|
||||||
$this->soapServer->handle($this->soapRequest->getSoapMessage());
|
$this->soapServer->handle($this->soapRequest->getSoapMessage());
|
||||||
$this->soapResponse->setContent(ob_get_clean());
|
$this->getResponse()->setContent(ob_get_clean());
|
||||||
|
|
||||||
return $this->soapResponse;
|
return $this->getResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -127,14 +127,14 @@ class SoapWebServiceController extends ContainerAware
|
||||||
$this->soapResponse = $this->checkResponse($response);
|
$this->soapResponse = $this->checkResponse($response);
|
||||||
|
|
||||||
// add response soap headers to soap server
|
// add response soap headers to soap server
|
||||||
foreach ($this->soapResponse->getSoapHeaders() as $header) {
|
foreach ($this->getResponse()->getSoapHeaders() as $header) {
|
||||||
$this->soapServer->addSoapHeader($header->toNativeSoapHeader());
|
$this->soapServer->addSoapHeader($header->toNativeSoapHeader());
|
||||||
}
|
}
|
||||||
|
|
||||||
// return operation return value to soap server
|
// return operation return value to soap server
|
||||||
return $this->serviceBinder->processServiceMethodReturnValue(
|
return $this->serviceBinder->processServiceMethodReturnValue(
|
||||||
$method,
|
$method,
|
||||||
$this->soapResponse->getReturnValue()
|
$this->getResponse()->getReturnValue()
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// collect request soap headers
|
// collect request soap headers
|
||||||
|
@ -155,7 +155,7 @@ class SoapWebServiceController extends ContainerAware
|
||||||
*/
|
*/
|
||||||
public function getResponse()
|
public function getResponse()
|
||||||
{
|
{
|
||||||
return $this->soapResponse;
|
return $this->soapResponse ?: $this->soapResponse = $this->container->get('besimple.soap.response');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -165,12 +165,12 @@ class SoapWebServiceController extends ContainerAware
|
||||||
*
|
*
|
||||||
* @return SoapResponse A valid SoapResponse
|
* @return SoapResponse A valid SoapResponse
|
||||||
*
|
*
|
||||||
* @throws InvalidArgumentException if the given Response is null or not a SoapResponse
|
* @throws InvalidArgumentException if the given Response is not an instance of SoapResponse
|
||||||
*/
|
*/
|
||||||
protected function checkResponse(Response $response)
|
protected function checkResponse(Response $response)
|
||||||
{
|
{
|
||||||
if (!$response instanceof SoapResponse) {
|
if (!$response instanceof SoapResponse) {
|
||||||
throw new \InvalidArgumentException();
|
throw new \InvalidArgumentException('You must return an instance of BeSimple\SoapBundle\Soap\SoapResponse');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $response;
|
return $response;
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
|
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
|
||||||
|
|
||||||
<parameters>
|
<parameters>
|
||||||
|
<parameter key="besimple.soap.response.class">BeSimple\SoapBundle\Soap\SoapResponse</parameter>
|
||||||
<parameter key="besimple.soap.context.class">BeSimple\SoapBundle\WebServiceContext</parameter>
|
<parameter key="besimple.soap.context.class">BeSimple\SoapBundle\WebServiceContext</parameter>
|
||||||
<parameter key="besimple.soap.cache_dir">%kernel.cache_dir%/webservice</parameter>
|
<parameter key="besimple.soap.cache_dir">%kernel.cache_dir%/webservice</parameter>
|
||||||
<parameter key="besimple.soap.binder.request_header.rpcliteral.class">BeSimple\SoapBundle\ServiceBinding\RpcLiteralRequestHeaderMessageBinder</parameter>
|
<parameter key="besimple.soap.binder.request_header.rpcliteral.class">BeSimple\SoapBundle\ServiceBinding\RpcLiteralRequestHeaderMessageBinder</parameter>
|
||||||
|
@ -17,6 +18,8 @@
|
||||||
</parameters>
|
</parameters>
|
||||||
|
|
||||||
<services>
|
<services>
|
||||||
|
<service id="besimple.soap.response" class="%besimple.soap.response.class%" />
|
||||||
|
|
||||||
<service id="besimple.soap.context.rpcliteral" class="%besimple.soap.context.class%" abstract="true">
|
<service id="besimple.soap.context.rpcliteral" class="%besimple.soap.context.class%" abstract="true">
|
||||||
<argument type="service" id="besimple.soap.definition.loader" />
|
<argument type="service" id="besimple.soap.definition.loader" />
|
||||||
<argument type="service" id="besimple.soap.definition.dumper.wsdl.rpcliteral" />
|
<argument type="service" id="besimple.soap.definition.dumper.wsdl.rpcliteral" />
|
||||||
|
|
|
@ -34,18 +34,20 @@ Annotations for Controllers
|
||||||
|
|
||||||
.. code-block:: php
|
.. code-block:: php
|
||||||
|
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
|
namespace My\App\Controller;
|
||||||
use BeSimple\SoapBundle\Soap\SoapResponse;
|
|
||||||
|
|
||||||
class DemoController extends Controller
|
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerAware;
|
||||||
|
|
||||||
|
class DemoController extends ContainerAware
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @Soap\Method("Hello")
|
* @Soap\Method("hello")
|
||||||
* @Soap\Param("name", phpType = "string")
|
* @Soap\Param("name", phpType = "string")
|
||||||
* @Soap\Result(phpType = "string")
|
* @Soap\Result(phpType = "string")
|
||||||
*/
|
*/
|
||||||
public function helloAction($name)
|
public function helloAction($name)
|
||||||
{
|
{
|
||||||
return new SoapResponse(sprintf('Hello %s!', $name));
|
return $this->container->get('besimple.soap.response')->setReturnValue(sprintf('Hello %s!', $name));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -9,7 +9,6 @@ Controller
|
||||||
namespace My\App\Controller;
|
namespace My\App\Controller;
|
||||||
|
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
|
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
|
||||||
use BeSimple\SoapBundle\Soap\SoapResponse;
|
|
||||||
use Symfony\Component\DependencyInjection\ContainerAware;
|
use Symfony\Component\DependencyInjection\ContainerAware;
|
||||||
|
|
||||||
class DemoController extends ContainerAware
|
class DemoController extends ContainerAware
|
||||||
|
@ -21,6 +20,6 @@ Controller
|
||||||
*/
|
*/
|
||||||
public function helloAction(array $names)
|
public function helloAction(array $names)
|
||||||
{
|
{
|
||||||
return new SoapResponse("Hello ".implode(', ', $names));
|
return $this->container->get('besimple.soap.response')->setReturnValue("Hello ".implode(', ', $names));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -15,7 +15,6 @@ Controller
|
||||||
namespace My\App\Controller;
|
namespace My\App\Controller;
|
||||||
|
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
|
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
|
||||||
use BeSimple\SoapBundle\Soap\SoapResponse;
|
|
||||||
use Symfony\Component\DependencyInjection\ContainerAware;
|
use Symfony\Component\DependencyInjection\ContainerAware;
|
||||||
|
|
||||||
class DemoController extends ContainerAware
|
class DemoController extends ContainerAware
|
||||||
|
@ -29,13 +28,13 @@ Controller
|
||||||
{
|
{
|
||||||
$user = $this->container->getDoctrine()->getRepository('MyApp:User')->findOneBy(array(
|
$user = $this->container->getDoctrine()->getRepository('MyApp:User')->findOneBy(array(
|
||||||
'name' => $name,
|
'name' => $name,
|
||||||
);
|
));
|
||||||
|
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
throw new \SoapFault('USER_NOT_FOUND', sprintf('The user with the name "%s" can not be found', $name));
|
throw new \SoapFault('USER_NOT_FOUND', sprintf('The user with the name "%s" can not be found', $name));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new SoapResponse($user);
|
return $this->container->get('besimple.soap.response')->setReturnValue($user);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ Controller
|
||||||
namespace My\App\Controller;
|
namespace My\App\Controller;
|
||||||
|
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
|
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
|
||||||
use BeSimple\SoapBundle\Soap\SoapResponse;
|
|
||||||
use Symfony\Component\DependencyInjection\ContainerAware;
|
use Symfony\Component\DependencyInjection\ContainerAware;
|
||||||
|
|
||||||
class DemoController extends ContainerAware
|
class DemoController extends ContainerAware
|
||||||
|
@ -27,6 +26,6 @@ Controller
|
||||||
throw new \SoapFault("INVALID_API_KEY", "The api_key is invalid.");
|
throw new \SoapFault("INVALID_API_KEY", "The api_key is invalid.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return new SoapResponse("Hello ".implode(', ', $names));
|
return $this->container->get('besimple.soap.response')->setReturnValue("Hello ".implode(', ', $names));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -58,6 +58,8 @@ class SoapResponse extends Response
|
||||||
public function setReturnValue($value)
|
public function setReturnValue($value)
|
||||||
{
|
{
|
||||||
$this->soapReturnValue = $value;
|
$this->soapReturnValue = $value;
|
||||||
|
|
||||||
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getReturnValue()
|
public function getReturnValue()
|
||||||
|
|
Loading…
Reference in New Issue