Used BeSimple\SoapCommon\Classmap for the webservice context
This commit is contained in:
parent
4a7ec164e5
commit
70a85460c9
|
@ -51,7 +51,7 @@ class BeSimpleSoapExtension extends Extension
|
||||||
|
|
||||||
$this->registerCacheConfiguration($config['cache'], $container, $loader);
|
$this->registerCacheConfiguration($config['cache'], $container, $loader);
|
||||||
|
|
||||||
if (isset($config['clients'])) {
|
if (!empty($config['clients'])) {
|
||||||
$this->registerClientConfiguration($config['clients'], $container, $loader);
|
$this->registerClientConfiguration($config['clients'], $container, $loader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,9 +146,9 @@ class BeSimpleSoapExtension extends Extension
|
||||||
|
|
||||||
$options = $container
|
$options = $container
|
||||||
->getDefinition('besimple.soap.context.'.$bindingSuffix)
|
->getDefinition('besimple.soap.context.'.$bindingSuffix)
|
||||||
->getArgument(4);
|
->getArgument(5);
|
||||||
|
|
||||||
$definition->replaceArgument(4, array_merge($options, $config));
|
$definition->replaceArgument(5, array_merge($options, $config));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getCacheType($type)
|
private function getCacheType($type)
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
<parameter key="besimple.soap.binder.response.documentwrapped.class">BeSimple\SoapBundle\ServiceBinding\DocumentLiteralWrappedResponseMessageBinder</parameter>
|
<parameter key="besimple.soap.binder.response.documentwrapped.class">BeSimple\SoapBundle\ServiceBinding\DocumentLiteralWrappedResponseMessageBinder</parameter>
|
||||||
<parameter key="besimple.soap.definition.dumper.wsdl.rpcliteral.class">BeSimple\SoapBundle\ServiceDefinition\Dumper\WsdlDumper</parameter>
|
<parameter key="besimple.soap.definition.dumper.wsdl.rpcliteral.class">BeSimple\SoapBundle\ServiceDefinition\Dumper\WsdlDumper</parameter>
|
||||||
<parameter key="besimple.soap.type.repository.class">BeSimple\SoapBundle\Converter\TypeRepository</parameter>
|
<parameter key="besimple.soap.type.repository.class">BeSimple\SoapBundle\Converter\TypeRepository</parameter>
|
||||||
|
<parameter key="besimple.soap.server.classmap.class">BeSimple\SoapCommon\Classmap</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
|
|
||||||
<services>
|
<services>
|
||||||
|
@ -23,6 +24,7 @@
|
||||||
<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" />
|
||||||
|
<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="service" id="besimple.soap.converter.collection" />
|
<argument type="service" id="besimple.soap.converter.collection" />
|
||||||
<argument type="collection">
|
<argument type="collection">
|
||||||
|
@ -39,6 +41,7 @@
|
||||||
<service id="besimple.soap.context.documentwrapped" class="%besimple.soap.context.class%" abstract="true">
|
<service id="besimple.soap.context.documentwrapped" 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.documentwrapped" />
|
<argument type="service" id="besimple.soap.definition.dumper.wsdl.documentwrapped" />
|
||||||
|
<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="service" id="besimple.soap.converter.collection" />
|
<argument type="service" id="besimple.soap.converter.collection" />
|
||||||
<argument type="collection">
|
<argument type="collection">
|
||||||
|
@ -54,12 +57,15 @@
|
||||||
|
|
||||||
<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>
|
||||||
</argument>
|
</argument>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
<service id="besimple.soap.server.classmap" class="%besimple.soap.server.classmap.class%" public="false" />
|
||||||
|
|
||||||
<service id="besimple.soap.type.repository" class="%besimple.soap.type.repository.class%">
|
<service id="besimple.soap.type.repository" class="%besimple.soap.type.repository.class%">
|
||||||
<call method="addXmlNamespace">
|
<call method="addXmlNamespace">
|
||||||
<argument>xsd</argument>
|
<argument>xsd</argument>
|
||||||
|
|
|
@ -18,21 +18,25 @@ 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, TypeRepository $typeRepository, array $options)
|
public function __construct(AnnotationComplexTypeLoader $loader, Classmap $classmap, 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;
|
||||||
}
|
}
|
||||||
|
@ -42,7 +46,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, $definition));
|
$this->wsdl = new Wsdl($this->typeRepository, $definition->getName(), $definition->getNamespace(), new WsdlTypeStrategy($this->loader, $this->classmap, $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()));
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,8 @@ 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;
|
||||||
|
@ -30,14 +32,16 @@ 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, ServiceDefinition $definition)
|
public function __construct(AnnotationComplexTypeLoader $loader, Classmap $classmap, ServiceDefinition $definition)
|
||||||
{
|
{
|
||||||
$this->loader = $loader;
|
$this->loader = $loader;
|
||||||
|
$this->classmap = $classmap;
|
||||||
$this->definition = $definition;
|
$this->definition = $definition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +90,7 @@ class WsdlTypeStrategy implements Strategy
|
||||||
private function getTypeStrategy()
|
private function getTypeStrategy()
|
||||||
{
|
{
|
||||||
if (!$this->typeStrategy) {
|
if (!$this->typeStrategy) {
|
||||||
$this->typeStrategy = new ComplexType($this->loader, $this->definition);
|
$this->typeStrategy = new ComplexType($this->loader, $this->classmap, $this->definition);
|
||||||
$this->typeStrategy->setContext($this->context);
|
$this->typeStrategy->setContext($this->context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ 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;
|
||||||
|
|
||||||
|
@ -21,11 +22,13 @@ 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, $definition)
|
public function __construct(AnnotationComplexTypeLoader $loader, Classmap $classmap, $definition)
|
||||||
{
|
{
|
||||||
$this->loader = $loader;
|
$this->loader = $loader;
|
||||||
|
$this->classmap = $classmap;
|
||||||
$this->definition = $definition;
|
$this->definition = $definition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +53,8 @@ class ComplexType extends AbstractStrategy
|
||||||
$soapTypeName = Wsdl::translateType($type);
|
$soapTypeName = Wsdl::translateType($type);
|
||||||
$soapType = 'tns:'.$soapTypeName;
|
$soapType = 'tns:'.$soapTypeName;
|
||||||
|
|
||||||
|
$this->classmap->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);
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
namespace BeSimple\SoapBundle\Soap;
|
namespace BeSimple\SoapBundle\Soap;
|
||||||
|
|
||||||
use BeSimple\SoapCommon\Cache;
|
use BeSimple\SoapCommon\Cache;
|
||||||
|
use BeSimple\SoapCommon\Classmap;
|
||||||
use BeSimple\SoapCommon\Converter\TypeConverterCollection;
|
use BeSimple\SoapCommon\Converter\TypeConverterCollection;
|
||||||
|
|
||||||
use Zend\Soap\Wsdl;
|
use Zend\Soap\Wsdl;
|
||||||
|
@ -25,11 +26,12 @@ class SoapServerFactory
|
||||||
private $converters;
|
private $converters;
|
||||||
private $options;
|
private $options;
|
||||||
|
|
||||||
public function __construct($wsdlFile, array $classmap, TypeConverterCollection $converters, array $options = array())
|
public function __construct($wsdlFile, Classmap $classmap, TypeConverterCollection $converters, array $options = array())
|
||||||
{
|
{
|
||||||
$this->wsdlFile = $wsdlFile;
|
$this->wsdlFile = $wsdlFile;
|
||||||
$this->classmap = $this->fixSoapServerClassmap($classmap);
|
$this->classmap = $classmap;
|
||||||
$this->converters = $converters;
|
$this->converters = $converters;
|
||||||
|
|
||||||
$this->setOptions($options);
|
$this->setOptions($options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,22 +68,11 @@ class SoapServerFactory
|
||||||
return new \SoapServer(
|
return new \SoapServer(
|
||||||
$this->wsdlFile,
|
$this->wsdlFile,
|
||||||
array(
|
array(
|
||||||
'classmap' => $this->classmap,
|
'classmap' => $this->classmap->all(),
|
||||||
'typemap' => $this->converters->getTypemap(),
|
'typemap' => $this->converters->getTypemap(),
|
||||||
'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
|
'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
|
||||||
'cache_wsdl' => null !== $this->options['cache_type'] ? $this->options['cache_type'] : Cache::getType(),
|
'cache_wsdl' => null !== $this->options['cache_type'] ? $this->options['cache_type'] : Cache::getType(),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
private function fixSoapServerClassmap($classmap)
|
|
||||||
{
|
|
||||||
$classmapFixed = array();
|
|
||||||
|
|
||||||
foreach ($classmap as $class => $definition) {
|
|
||||||
$classmapFixed[Wsdl::translateType($class)] = $class;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $classmapFixed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ use BeSimple\SoapBundle\ServiceBinding\ServiceBinder;
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Dumper\DumperInterface;
|
use BeSimple\SoapBundle\ServiceDefinition\Dumper\DumperInterface;
|
||||||
use BeSimple\SoapBundle\Soap\SoapServerFactory;
|
use BeSimple\SoapBundle\Soap\SoapServerFactory;
|
||||||
|
|
||||||
|
use BeSimple\SoapCommon\Classmap;
|
||||||
use BeSimple\SoapCommon\Converter\TypeConverterCollection;
|
use BeSimple\SoapCommon\Converter\TypeConverterCollection;
|
||||||
|
|
||||||
use Symfony\Component\Config\ConfigCache;
|
use Symfony\Component\Config\ConfigCache;
|
||||||
|
@ -39,10 +40,12 @@ class WebServiceContext
|
||||||
private $serviceBinder;
|
private $serviceBinder;
|
||||||
private $serverFactory;
|
private $serverFactory;
|
||||||
|
|
||||||
public function __construct(LoaderInterface $loader, DumperInterface $dumper, TypeRepository $typeRepository, TypeConverterCollection $converters, array $options) {
|
public function __construct(LoaderInterface $loader, DumperInterface $dumper, Classmap $classmap, TypeRepository $typeRepository, TypeConverterCollection $converters, array $options) {
|
||||||
$this->loader = $loader;
|
$this->loader = $loader;
|
||||||
$this->wsdlFileDumper = $dumper;
|
$this->wsdlFileDumper = $dumper;
|
||||||
|
|
||||||
|
$this->classmap = $classmap;
|
||||||
|
|
||||||
$this->typeRepository = $typeRepository;
|
$this->typeRepository = $typeRepository;
|
||||||
$this->converters = $converters;
|
$this->converters = $converters;
|
||||||
|
|
||||||
|
@ -102,7 +105,7 @@ class WebServiceContext
|
||||||
if (null === $this->serverFactory) {
|
if (null === $this->serverFactory) {
|
||||||
$this->serverFactory = new SoapServerFactory(
|
$this->serverFactory = new SoapServerFactory(
|
||||||
$this->getWsdlFile(),
|
$this->getWsdlFile(),
|
||||||
$this->serviceDefinition->getDefinitionComplexTypes(),
|
$this->classmap,
|
||||||
$this->converters,
|
$this->converters,
|
||||||
array(
|
array(
|
||||||
'debug' => $this->options['debug'],
|
'debug' => $this->options['debug'],
|
||||||
|
|
Loading…
Reference in New Issue