diff --git a/DependencyInjection/BeSimpleSoapExtension.php b/DependencyInjection/BeSimpleSoapExtension.php index faeb6bf..15a92d1 100644 --- a/DependencyInjection/BeSimpleSoapExtension.php +++ b/DependencyInjection/BeSimpleSoapExtension.php @@ -43,6 +43,8 @@ class BeSimpleSoapExtension extends Extension $config = $processor->process($configuration->getConfigTree(), $configs); + $container->setParameter('besimple.soap.definition.dumper.options.stylesheet', $config['wsdl_dumper']['stylesheet']); + foreach($config['services'] as $name => $serviceConfig) { $serviceConfig['name'] = $name; $this->createWebServiceContext($serviceConfig, $container); diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index ded0ae1..0f538cc 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -10,6 +10,7 @@ namespace BeSimple\SoapBundle\DependencyInjection; +use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; use Symfony\Component\Config\Definition\Builder\TreeBuilder; /** @@ -27,8 +28,16 @@ class Configuration public function getConfigTree() { $treeBuilder = new TreeBuilder(); - $rootNode = $treeBuilder->root('web_service'); + $rootNode = $treeBuilder->root('be_simple_soap'); + $this->addServicesSection($rootNode); + $this->addWsdlDumperSection($rootNode); + + return $treeBuilder->buildTree(); + } + + private function addServicesSection(ArrayNodeDefinition $rootNode) + { $rootNode ->children() ->arrayNode('services') @@ -55,7 +64,19 @@ class Configuration ->end() ->end() ; + } - return $treeBuilder->buildTree(); + private function addWsdlDumperSection(ArrayNodeDefinition $rootNode) + { + $rootNode + ->children() + ->arrayNode('wsdl_dumper') + ->addDefaultsIfNotSet() + ->children() + ->scalarNode('stylesheet')->defaultNull() + ->end() + ->end() + ->end() + ; } } \ No newline at end of file diff --git a/Resources/config/webservice.xml b/Resources/config/webservice.xml index 5b7798f..b4e0b24 100644 --- a/Resources/config/webservice.xml +++ b/Resources/config/webservice.xml @@ -44,6 +44,9 @@ + + %besimple.soap.definition.dumper.options.stylesheet% + diff --git a/ServiceDefinition/Dumper/DumperInterface.php b/ServiceDefinition/Dumper/DumperInterface.php index e1dcb11..3b8b257 100644 --- a/ServiceDefinition/Dumper/DumperInterface.php +++ b/ServiceDefinition/Dumper/DumperInterface.php @@ -14,5 +14,5 @@ use BeSimple\SoapBundle\ServiceDefinition\ServiceDefinition; interface DumperInterface { - function dumpServiceDefinition(ServiceDefinition $definition, array $options = array()); + function dumpServiceDefinition(ServiceDefinition $definition, $endpoint); } \ No newline at end of file diff --git a/ServiceDefinition/Dumper/WsdlDumper.php b/ServiceDefinition/Dumper/WsdlDumper.php index 7c07064..4653923 100644 --- a/ServiceDefinition/Dumper/WsdlDumper.php +++ b/ServiceDefinition/Dumper/WsdlDumper.php @@ -25,27 +25,28 @@ use Zend\Soap\Wsdl; class WsdlDumper implements DumperInterface { private $loader; + private $options; + private $wsdl; private $definition; - public function __construct(AnnotationComplexTypeLoader $loader) + public function __construct(AnnotationComplexTypeLoader $loader, array $options) { - $this->loader = $loader; + $this->loader = $loader; + $this->options = $options; } - public function dumpServiceDefinition(ServiceDefinition $definition, array $options = array()) + public function dumpServiceDefinition(ServiceDefinition $definition, $endpoint) { Assert::thatArgumentNotNull('definition', $definition); - $options = array_merge(array('endpoint' => '', 'stylesheet' => null), $options); - $this->definition = $definition; $this->wsdl = new Wsdl($definition->getName(), $definition->getNamespace(), new WsdlTypeStrategy($this->loader, $definition)); $port = $this->wsdl->addPortType($this->getPortTypeName()); $binding = $this->wsdl->addBinding($this->getBindingName(), $this->qualify($this->getPortTypeName())); $this->wsdl->addSoapBinding($binding, 'rpc'); - $this->wsdl->addService($this->getServiceName(), $this->getPortName(), $this->qualify($this->getBindingName()), $options['endpoint']); + $this->wsdl->addService($this->getServiceName(), $this->getPortName(), $this->qualify($this->getBindingName()), $endpoint); foreach ($definition->getMethods() as $method) { $requestParts = array(); @@ -87,8 +88,8 @@ class WsdlDumper implements DumperInterface $dom = $this->wsdl->toDomDocument(); $dom->formatOutput = true; - if (null !== $options['stylesheet']) { - $stylesheet = $dom->createProcessingInstruction('xml-stylesheet', sprintf('type="text/xsl" href="%s"', $options['stylesheet'])); + if ($this->options['stylesheet']) { + $stylesheet = $dom->createProcessingInstruction('xml-stylesheet', sprintf('type="text/xsl" href="%s"', $this->options['stylesheet'])); $dom->insertBefore($stylesheet, $dom->documentElement); } diff --git a/WebServiceContext.php b/WebServiceContext.php index 7303809..531e027 100644 --- a/WebServiceContext.php +++ b/WebServiceContext.php @@ -76,7 +76,7 @@ class WebServiceContext $cache = new ConfigCache($file, $this->options['debug']); if(!$cache->isFresh()) { - $cache->write($this->wsdlFileDumper->dumpServiceDefinition($this->getServiceDefinition(), array('endpoint' => $endpoint))); + $cache->write($this->wsdlFileDumper->dumpServiceDefinition($this->getServiceDefinition(), $endpoint)); } return (string) $cache;