Moved Classmap instance in ServiceDefinition

This commit is contained in:
Francis Besset 2011-11-26 12:18:29 +01:00
parent ea65831c12
commit bacdc90870
6 changed files with 29 additions and 22 deletions

View File

@ -56,7 +56,6 @@
<service id="besimple.soap.definition.dumper.wsdl.rpcliteral" class="%besimple.soap.definition.dumper.wsdl.rpcliteral.class%"> <service id="besimple.soap.definition.dumper.wsdl.rpcliteral" class="%besimple.soap.definition.dumper.wsdl.rpcliteral.class%">
<argument type="service" id="besimple.soap.definition.loader.annot_complextype" /> <argument type="service" id="besimple.soap.definition.loader.annot_complextype" />
<argument type="service" id="besimple.soap.server.classmap" />
<argument type="service" id="besimple.soap.type.repository" /> <argument type="service" id="besimple.soap.type.repository" />
<argument type="collection"> <argument type="collection">
<argument key="stylesheet">%besimple.soap.definition.dumper.options.stylesheet%</argument> <argument key="stylesheet">%besimple.soap.definition.dumper.options.stylesheet%</argument>

View File

@ -18,25 +18,21 @@ use BeSimple\SoapBundle\ServiceDefinition\Loader\AnnotationComplexTypeLoader;
use BeSimple\SoapBundle\Util\Assert; use BeSimple\SoapBundle\Util\Assert;
use BeSimple\SoapBundle\Util\QName; use BeSimple\SoapBundle\Util\QName;
use BeSimple\SoapCommon\Classmap;
/** /**
* @author Christian Kerl <christian-kerl@web.de> * @author Christian Kerl <christian-kerl@web.de>
*/ */
class WsdlDumper implements DumperInterface class WsdlDumper implements DumperInterface
{ {
private $loader; private $loader;
private $classmap;
private $typeRepository; private $typeRepository;
private $options; private $options;
private $wsdl; private $wsdl;
private $definition; private $definition;
public function __construct(AnnotationComplexTypeLoader $loader, Classmap $classmap, TypeRepository $typeRepository, array $options) public function __construct(AnnotationComplexTypeLoader $loader, TypeRepository $typeRepository, array $options)
{ {
$this->loader = $loader; $this->loader = $loader;
$this->classmap = $classmap;
$this->typeRepository = $typeRepository; $this->typeRepository = $typeRepository;
$this->options = $options; $this->options = $options;
} }
@ -46,7 +42,7 @@ class WsdlDumper implements DumperInterface
Assert::thatArgumentNotNull('definition', $definition); Assert::thatArgumentNotNull('definition', $definition);
$this->definition = $definition; $this->definition = $definition;
$this->wsdl = new Wsdl($this->typeRepository, $definition->getName(), $definition->getNamespace(), new WsdlTypeStrategy($this->loader, $this->classmap, $definition)); $this->wsdl = new Wsdl($this->typeRepository, $definition->getName(), $definition->getNamespace(), new WsdlTypeStrategy($this->loader, $definition));
$port = $this->wsdl->addPortType($this->getPortTypeName()); $port = $this->wsdl->addPortType($this->getPortTypeName());
$binding = $this->wsdl->addBinding($this->getBindingName(), $this->qualify($this->getPortTypeName())); $binding = $this->wsdl->addBinding($this->getBindingName(), $this->qualify($this->getPortTypeName()));

View File

@ -15,8 +15,6 @@ use BeSimple\SoapBundle\ServiceDefinition\Loader\AnnotationComplexTypeLoader;
use BeSimple\SoapBundle\ServiceDefinition\Strategy\ComplexType; use BeSimple\SoapBundle\ServiceDefinition\Strategy\ComplexType;
use BeSimple\SoapBundle\Util\String; use BeSimple\SoapBundle\Util\String;
use BeSimple\SoapCommon\Classmap;
use Zend\Soap\Exception; use Zend\Soap\Exception;
use Zend\Soap\Wsdl as BaseWsdl; use Zend\Soap\Wsdl as BaseWsdl;
use Zend\Soap\Wsdl\Strategy; use Zend\Soap\Wsdl\Strategy;
@ -32,16 +30,14 @@ class WsdlTypeStrategy implements Strategy
private $context; private $context;
private $loader; private $loader;
private $classmap;
private $definition; private $definition;
private $typeStrategy; private $typeStrategy;
private $arrayStrategy; private $arrayStrategy;
public function __construct(AnnotationComplexTypeLoader $loader, Classmap $classmap, ServiceDefinition $definition) public function __construct(AnnotationComplexTypeLoader $loader, ServiceDefinition $definition)
{ {
$this->loader = $loader; $this->loader = $loader;
$this->classmap = $classmap;
$this->definition = $definition; $this->definition = $definition;
} }
@ -90,7 +86,7 @@ class WsdlTypeStrategy implements Strategy
private function getTypeStrategy() private function getTypeStrategy()
{ {
if (!$this->typeStrategy) { if (!$this->typeStrategy) {
$this->typeStrategy = new ComplexType($this->loader, $this->classmap, $this->definition); $this->typeStrategy = new ComplexType($this->loader, $this->definition);
$this->typeStrategy->setContext($this->context); $this->typeStrategy->setContext($this->context);
} }

View File

@ -11,6 +11,7 @@
namespace BeSimple\SoapBundle\ServiceDefinition; namespace BeSimple\SoapBundle\ServiceDefinition;
use BeSimple\SoapBundle\Util\Collection; use BeSimple\SoapBundle\Util\Collection;
use BeSimple\SoapCommon\Classmap;
class ServiceDefinition class ServiceDefinition
{ {
@ -29,16 +30,22 @@ class ServiceDefinition
*/ */
private $methods; private $methods;
/**
* @var \BeSimple\SoapCommon\Classmap
*/
private $classmap;
private $complexTypes = array(); private $complexTypes = array();
public function __construct($name = null, $namespace = null, array $methods = array()) public function __construct($name = null, $namespace = null, array $methods = array(), Classmap $classmap = null)
{ {
$this->setName($name); $this->setName($name);
$this->setNamespace($namespace); $this->setNamespace($namespace);
$this->methods = new Collection('getName', 'BeSimple\SoapBundle\ServiceDefinition\Method'); $this->methods = new Collection('getName', 'BeSimple\SoapBundle\ServiceDefinition\Method');
$this->setMethods($methods); $this->setMethods($methods);
$this->classmap = $classmap;
} }
/** /**
@ -111,6 +118,16 @@ class ServiceDefinition
return $types; return $types;
} }
public function getClassmap()
{
return $this->classmap ?: array();
}
public function setClassmap(Classmap $classmap)
{
$this->classmap = $classmap;
}
public function addDefinitionComplexType($type, Collection $complexType) public function addDefinitionComplexType($type, Collection $complexType)
{ {
$this->complexTypes[$type] = $complexType; $this->complexTypes[$type] = $complexType;

View File

@ -11,8 +11,6 @@
namespace BeSimple\SoapBundle\ServiceDefinition\Strategy; namespace BeSimple\SoapBundle\ServiceDefinition\Strategy;
use BeSimple\SoapBundle\ServiceDefinition\Loader\AnnotationComplexTypeLoader; use BeSimple\SoapBundle\ServiceDefinition\Loader\AnnotationComplexTypeLoader;
use BeSimple\SoapCommon\Classmap;
use Zend\Soap\Wsdl; use Zend\Soap\Wsdl;
use Zend\Soap\Wsdl\Strategy\AbstractStrategy; use Zend\Soap\Wsdl\Strategy\AbstractStrategy;
@ -22,13 +20,11 @@ use Zend\Soap\Wsdl\Strategy\AbstractStrategy;
class ComplexType extends AbstractStrategy class ComplexType extends AbstractStrategy
{ {
private $loader; private $loader;
private $classmap;
private $definition; private $definition;
public function __construct(AnnotationComplexTypeLoader $loader, Classmap $classmap, $definition) public function __construct(AnnotationComplexTypeLoader $loader, $definition)
{ {
$this->loader = $loader; $this->loader = $loader;
$this->classmap = $classmap;
$this->definition = $definition; $this->definition = $definition;
} }
@ -53,7 +49,7 @@ class ComplexType extends AbstractStrategy
$soapTypeName = Wsdl::translateType($type); $soapTypeName = Wsdl::translateType($type);
$soapType = 'tns:'.$soapTypeName; $soapType = 'tns:'.$soapTypeName;
$this->classmap->add($soapTypeName, $type); $this->definition->getClassmap()->add($soapTypeName, $type);
// Register type here to avoid recursion // Register type here to avoid recursion
$this->getContext()->addType($type, $soapType); $this->getContext()->addType($type, $soapType);

View File

@ -69,6 +69,9 @@ class WebServiceContext
$this->serviceDefinition->setName($this->options['name']); $this->serviceDefinition->setName($this->options['name']);
$this->serviceDefinition->setNamespace($this->options['namespace']); $this->serviceDefinition->setNamespace($this->options['namespace']);
$this->serviceDefinition->setClassmap($this->classmap);
$this->classmap = null;
$this->typeRepository->fixTypeInformation($this->serviceDefinition); $this->typeRepository->fixTypeInformation($this->serviceDefinition);
} }
} }
@ -117,7 +120,7 @@ class WebServiceContext
if (null === $this->serverBuilder) { if (null === $this->serverBuilder) {
$this->serverBuilder = SoapServerBuilder::createWithDefaults() $this->serverBuilder = SoapServerBuilder::createWithDefaults()
->withWsdl($this->getWsdlFile()) ->withWsdl($this->getWsdlFile())
->withClassmap($this->classmap) ->withClassmap($this->getServiceDefinition()->getClassmap())
->withTypeConverters($this->converters) ->withTypeConverters($this->converters)
; ;