Compare commits
23 Commits
Author | SHA1 | Date | |
---|---|---|---|
e4cb612aed | |||
59ea6b1ce0 | |||
7bb849e394 | |||
02722eae8f | |||
b7581f29b0 | |||
dc6e1e0889 | |||
f986400dc2 | |||
67410805ba | |||
2ae7515294 | |||
cdfc3cd5bd | |||
9ac755d86e | |||
321dcf3058 | |||
3a2b8e32ee | |||
fd5154a469 | |||
188f282a87 | |||
1b4e262c60 | |||
60e3714602 | |||
1e82d7fdd7 | |||
8788d7595d | |||
b45224587a | |||
c8baf14c75 | |||
53849c68e0 | |||
ecdf7e1872 |
@ -15,8 +15,7 @@ namespace BeSimple\SoapBundle\Controller;
|
|||||||
use BeSimple\SoapBundle\Handler\ExceptionHandler;
|
use BeSimple\SoapBundle\Handler\ExceptionHandler;
|
||||||
use BeSimple\SoapBundle\Soap\SoapRequest;
|
use BeSimple\SoapBundle\Soap\SoapRequest;
|
||||||
use BeSimple\SoapBundle\Soap\SoapResponse;
|
use BeSimple\SoapBundle\Soap\SoapResponse;
|
||||||
use BeSimple\SoapServer\Exception as SoapException;
|
use BeSimple\SoapServer\SoapServerBuilder;
|
||||||
|
|
||||||
use Symfony\Component\DependencyInjection\ContainerAware;
|
use Symfony\Component\DependencyInjection\ContainerAware;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
@ -96,9 +95,10 @@ class SoapWebServiceController extends ContainerAware
|
|||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
|
||||||
$query = $this->container->get('request')->query;
|
$request = $this->container->get('request');
|
||||||
if (!$query->has('wsdl') && !$query->has('WSDL')) {
|
$query = $request->query;
|
||||||
$this->container->get('request')->setRequestFormat('xml');
|
if ($query->has('wsdl') || $query->has('WSDL')) {
|
||||||
|
$request->setRequestFormat('wsdl');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $response;
|
return $response;
|
||||||
@ -130,16 +130,30 @@ class SoapWebServiceController extends ContainerAware
|
|||||||
'logger' => $logger,
|
'logger' => $logger,
|
||||||
));
|
));
|
||||||
|
|
||||||
$server = $this
|
$handler = new ExceptionHandler($exception, $details);
|
||||||
->container
|
if ($soapFault = $request->query->get('_besimple_soap_fault')) {
|
||||||
->get(sprintf('besimple.soap.context.%s', $webservice))
|
$handler->setSoapFault($soapFault);
|
||||||
->getServerBuilder()
|
|
||||||
->withHandler(new ExceptionHandler($exception, $details))
|
// Remove parameter from query because cannot be Serialized in Logger
|
||||||
|
$request->query->remove('_besimple_soap_fault');
|
||||||
|
}
|
||||||
|
|
||||||
|
$server = SoapServerBuilder::createWithDefaults()
|
||||||
|
->withWsdl(__DIR__.'/../Handler/wsdl/exception.wsdl')
|
||||||
|
->withWsdlCacheNone()
|
||||||
|
->withHandler($handler)
|
||||||
->build()
|
->build()
|
||||||
;
|
;
|
||||||
|
|
||||||
ob_start();
|
ob_start();
|
||||||
$server->handle($request->getContent());
|
$server->handle(
|
||||||
|
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://besim.pl/soap/exception/1.0/">'.
|
||||||
|
'<soapenv:Header/>'.
|
||||||
|
'<soapenv:Body>'.
|
||||||
|
'<ns:exception />'.
|
||||||
|
'</soapenv:Body>'.
|
||||||
|
'</soapenv:Envelope>'
|
||||||
|
);
|
||||||
|
|
||||||
return new Response(ob_get_clean());
|
return new Response(ob_get_clean());
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,6 @@ namespace BeSimple\SoapBundle\Converter;
|
|||||||
|
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\ServiceDefinition;
|
use BeSimple\SoapBundle\ServiceDefinition\ServiceDefinition;
|
||||||
use BeSimple\SoapBundle\Util\Assert;
|
use BeSimple\SoapBundle\Util\Assert;
|
||||||
use BeSimple\SoapBundle\Util\QName;
|
|
||||||
use BeSimple\SoapBundle\Util\String;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Christian Kerl <christian-kerl@web.de>
|
* @author Christian Kerl <christian-kerl@web.de>
|
||||||
@ -50,8 +48,6 @@ class TypeRepository
|
|||||||
|
|
||||||
public function fixTypeInformation(ServiceDefinition $definition)
|
public function fixTypeInformation(ServiceDefinition $definition)
|
||||||
{
|
{
|
||||||
$typeMap = $this->defaultTypeMap;
|
|
||||||
|
|
||||||
foreach($definition->getAllTypes() as $type) {
|
foreach($definition->getAllTypes() as $type) {
|
||||||
$phpType = $type->getPhpType();
|
$phpType = $type->getPhpType();
|
||||||
$xmlType = $type->getXmlType();
|
$xmlType = $type->getXmlType();
|
||||||
@ -67,4 +63,4 @@ class TypeRepository
|
|||||||
$type->setXmlType($xmlType);
|
$type->setXmlType($xmlType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ namespace BeSimple\SoapBundle\Converter;
|
|||||||
use BeSimple\SoapBundle\Soap\SoapRequest;
|
use BeSimple\SoapBundle\Soap\SoapRequest;
|
||||||
use BeSimple\SoapBundle\Soap\SoapResponse;
|
use BeSimple\SoapBundle\Soap\SoapResponse;
|
||||||
use BeSimple\SoapBundle\Util\String;
|
use BeSimple\SoapBundle\Util\String;
|
||||||
|
use BeSimple\SoapCommon\Converter\TypeConverterInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Christian Kerl <christian-kerl@web.de>
|
* @author Christian Kerl <christian-kerl@web.de>
|
||||||
@ -52,4 +53,4 @@ class XopIncludeTypeConverter implements TypeConverterInterface
|
|||||||
{
|
{
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ class BeSimpleSoapExtension extends Extension
|
|||||||
|
|
||||||
foreach ($config as $client => $options) {
|
foreach ($config as $client => $options) {
|
||||||
$definition = new DefinitionDecorator('besimple.soap.client.builder');
|
$definition = new DefinitionDecorator('besimple.soap.client.builder');
|
||||||
$context = $container->setDefinition(sprintf('besimple.soap.client.builder.%s', $client), $definition);
|
$container->setDefinition(sprintf('besimple.soap.client.builder.%s', $client), $definition);
|
||||||
|
|
||||||
$definition->replaceArgument(0, $options['wsdl']);
|
$definition->replaceArgument(0, $options['wsdl']);
|
||||||
|
|
||||||
@ -104,12 +104,8 @@ class BeSimpleSoapExtension extends Extension
|
|||||||
|
|
||||||
$definition->replaceArgument(1, $defOptions);
|
$definition->replaceArgument(1, $defOptions);
|
||||||
|
|
||||||
if (!empty($options['classmap'])) {
|
$classmap = $this->createClientClassmap($client, $options['classmap'], $container);
|
||||||
$classmap = $this->createClientClassmap($client, $options['classmap'], $container);
|
$definition->replaceArgument(2, new Reference($classmap));
|
||||||
$definition->replaceArgument(2, new Reference($classmap));
|
|
||||||
} else {
|
|
||||||
$definition->replaceArgument(2, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->createClient($client, $container);
|
$this->createClient($client, $container);
|
||||||
}
|
}
|
||||||
@ -118,11 +114,13 @@ class BeSimpleSoapExtension extends Extension
|
|||||||
private function createClientClassmap($client, array $classmap, ContainerBuilder $container)
|
private function createClientClassmap($client, array $classmap, ContainerBuilder $container)
|
||||||
{
|
{
|
||||||
$definition = new DefinitionDecorator('besimple.soap.classmap');
|
$definition = new DefinitionDecorator('besimple.soap.classmap');
|
||||||
$context = $container->setDefinition(sprintf('besimple.soap.classmap.%s', $client), $definition);
|
$container->setDefinition(sprintf('besimple.soap.classmap.%s', $client), $definition);
|
||||||
|
|
||||||
$definition->setMethodCalls(array(
|
if (!empty($classmap)) {
|
||||||
array('set', array($classmap)),
|
$definition->setMethodCalls(array(
|
||||||
));
|
array('set', array($classmap)),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
return sprintf('besimple.soap.classmap.%s', $client);
|
return sprintf('besimple.soap.classmap.%s', $client);
|
||||||
}
|
}
|
||||||
@ -130,7 +128,7 @@ class BeSimpleSoapExtension extends Extension
|
|||||||
private function createClient($client, ContainerBuilder $container)
|
private function createClient($client, ContainerBuilder $container)
|
||||||
{
|
{
|
||||||
$definition = new DefinitionDecorator('besimple.soap.client');
|
$definition = new DefinitionDecorator('besimple.soap.client');
|
||||||
$context = $container->setDefinition(sprintf('besimple.soap.client.%s', $client), $definition);
|
$container->setDefinition(sprintf('besimple.soap.client.%s', $client), $definition);
|
||||||
|
|
||||||
$definition->setFactoryService(sprintf('besimple.soap.client.builder.%s', $client));
|
$definition->setFactoryService(sprintf('besimple.soap.client.builder.%s', $client));
|
||||||
}
|
}
|
||||||
@ -142,7 +140,7 @@ class BeSimpleSoapExtension extends Extension
|
|||||||
|
|
||||||
$contextId = 'besimple.soap.context.'.$config['name'];
|
$contextId = 'besimple.soap.context.'.$config['name'];
|
||||||
$definition = new DefinitionDecorator('besimple.soap.context.'.$bindingSuffix);
|
$definition = new DefinitionDecorator('besimple.soap.context.'.$bindingSuffix);
|
||||||
$context = $container->setDefinition($contextId, $definition);
|
$container->setDefinition($contextId, $definition);
|
||||||
|
|
||||||
if (isset($config['cache_type'])) {
|
if (isset($config['cache_type'])) {
|
||||||
$config['cache_type'] = $this->getCacheType($config['cache_type']);
|
$config['cache_type'] = $this->getCacheType($config['cache_type']);
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace BeSimple\SoapBundle\EventListener;
|
namespace BeSimple\SoapBundle\EventListener;
|
||||||
|
|
||||||
use Symfony\Component\HttpKernel\HttpKernelInterface;
|
|
||||||
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
||||||
|
|
||||||
class RequestFormatListener
|
class RequestFormatListener
|
||||||
|
@ -67,12 +67,18 @@ class SoapExceptionListener extends ExceptionListener
|
|||||||
// hack to retrieve the current WebService name in the controller
|
// hack to retrieve the current WebService name in the controller
|
||||||
$request->query->set('_besimple_soap_webservice', $webservice);
|
$request->query->set('_besimple_soap_webservice', $webservice);
|
||||||
|
|
||||||
|
$exception = $event->getException();
|
||||||
|
if ($exception instanceof \SoapFault) {
|
||||||
|
$request->query->set('_besimple_soap_fault', $exception);
|
||||||
|
}
|
||||||
|
|
||||||
parent::onKernelException($event);
|
parent::onKernelException($event);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getSubscribedEvents()
|
public static function getSubscribedEvents()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
// Must be called before ExceptionListener of HttpKernel component
|
||||||
KernelEvents::EXCEPTION => array('onKernelException', -64),
|
KernelEvents::EXCEPTION => array('onKernelException', -64),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ class ExceptionHandler
|
|||||||
{
|
{
|
||||||
protected $exception;
|
protected $exception;
|
||||||
protected $details;
|
protected $details;
|
||||||
|
protected $soapFault;
|
||||||
|
|
||||||
public function __construct(FlattenException $exception, $details = null)
|
public function __construct(FlattenException $exception, $details = null)
|
||||||
{
|
{
|
||||||
@ -30,8 +31,17 @@ class ExceptionHandler
|
|||||||
$this->details = $details;
|
$this->details = $details;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setSoapFault(\SoapFault $soapFault)
|
||||||
|
{
|
||||||
|
$this->soapFault = $soapFault;
|
||||||
|
}
|
||||||
|
|
||||||
public function __call($method, $arguments)
|
public function __call($method, $arguments)
|
||||||
{
|
{
|
||||||
|
if (isset($this->soapFault)) {
|
||||||
|
throw $this->soapFault;
|
||||||
|
}
|
||||||
|
|
||||||
$code = $this->exception->getStatusCode();
|
$code = $this->exception->getStatusCode();
|
||||||
|
|
||||||
throw new ReceiverSoapFault(
|
throw new ReceiverSoapFault(
|
||||||
|
31
src/BeSimple/SoapBundle/Handler/wsdl/exception.wsdl
Normal file
31
src/BeSimple/SoapBundle/Handler/wsdl/exception.wsdl
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://besim.pl/soap/exception/1.0/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="Exception" targetNamespace="http://besim.pl/soap/exception/1.0/">
|
||||||
|
|
||||||
|
<portType name="ExceptionPortType">
|
||||||
|
<operation name="exception">
|
||||||
|
<input message="tns:empty"/>
|
||||||
|
<output message="tns:empty"/>
|
||||||
|
</operation>
|
||||||
|
</portType>
|
||||||
|
|
||||||
|
<message name="empty" />
|
||||||
|
|
||||||
|
<binding name="ExceptionBinding" type="tns:ExceptionPortType">
|
||||||
|
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
|
||||||
|
<operation name="exception">
|
||||||
|
<soap:operation soapAction="http://besim.pl/soap/exception/1.0/exception"/>
|
||||||
|
<input>
|
||||||
|
<soap:body use="literal" namespace="http://besim.pl/soap/exception/1.0/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</input>
|
||||||
|
<output>
|
||||||
|
<soap:body use="literal" namespace="http://besim.pl/soap/exception/1.0/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</output>
|
||||||
|
</operation>
|
||||||
|
</binding>
|
||||||
|
|
||||||
|
<service name="ExceptionService">
|
||||||
|
<port name="ExceptionPort" binding="tns:ExceptionBinding">
|
||||||
|
<soap:address location="http://localhost/soap/Exception"/>
|
||||||
|
</port>
|
||||||
|
</service>
|
||||||
|
</definitions>
|
@ -6,13 +6,13 @@
|
|||||||
|
|
||||||
<route id="_webservice_call" pattern="/{webservice}">
|
<route id="_webservice_call" pattern="/{webservice}">
|
||||||
<default key="_controller">BeSimpleSoapBundle:SoapWebService:Call</default>
|
<default key="_controller">BeSimpleSoapBundle:SoapWebService:Call</default>
|
||||||
<default key="_format">soap</default>
|
<default key="_format">xml</default>
|
||||||
<requirement key="_method">POST</requirement>
|
<requirement key="_method">POST</requirement>
|
||||||
</route>
|
</route>
|
||||||
|
|
||||||
<route id="_webservice_definition" pattern="/{webservice}">
|
<route id="_webservice_definition" pattern="/{webservice}">
|
||||||
<default key="_controller">BeSimpleSoapBundle:SoapWebService:Definition</default>
|
<default key="_controller">BeSimpleSoapBundle:SoapWebService:Definition</default>
|
||||||
<default key="_format">wsdl</default>
|
<default key="_format">xml</default>
|
||||||
<requirement key="_method">GET</requirement>
|
<requirement key="_method">GET</requirement>
|
||||||
</route>
|
</route>
|
||||||
</routes>
|
</routes>
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
<argument key="binder_request_header_class">%besimple.soap.binder.request_header.rpcliteral.class%</argument>
|
<argument key="binder_request_header_class">%besimple.soap.binder.request_header.rpcliteral.class%</argument>
|
||||||
<argument key="binder_request_class">%besimple.soap.binder.request.rpcliteral.class%</argument>
|
<argument key="binder_request_class">%besimple.soap.binder.request.rpcliteral.class%</argument>
|
||||||
<argument key="binder_response_class">%besimple.soap.binder.response.rpcliteral.class%</argument>
|
<argument key="binder_response_class">%besimple.soap.binder.response.rpcliteral.class%</argument>
|
||||||
|
<argument key="wsdl_stylesheet">%besimple.soap.definition.dumper.options.stylesheet%</argument>
|
||||||
</argument>
|
</argument>
|
||||||
<argument type="service" id="besimple.soap.cache" />
|
<argument type="service" id="besimple.soap.cache" />
|
||||||
</service>
|
</service>
|
||||||
@ -58,6 +59,7 @@
|
|||||||
<argument key="binder_request_header_class">%besimple.soap.binder.request_header.documentwrapped.class%</argument>
|
<argument key="binder_request_header_class">%besimple.soap.binder.request_header.documentwrapped.class%</argument>
|
||||||
<argument key="binder_request_class">%besimple.soap.binder.request.documentwrapped.class%</argument>
|
<argument key="binder_request_class">%besimple.soap.binder.request.documentwrapped.class%</argument>
|
||||||
<argument key="binder_response_class">%besimple.soap.binder.response.documentwrapped.class%</argument>
|
<argument key="binder_response_class">%besimple.soap.binder.response.documentwrapped.class%</argument>
|
||||||
|
<argument key="wsdl_stylesheet">%besimple.soap.definition.dumper.options.stylesheet%</argument>
|
||||||
</argument>
|
</argument>
|
||||||
<argument type="service" id="besimple.soap.cache" />
|
<argument type="service" id="besimple.soap.cache" />
|
||||||
</service>
|
</service>
|
||||||
|
@ -13,8 +13,6 @@
|
|||||||
namespace BeSimple\SoapBundle\ServiceBinding;
|
namespace BeSimple\SoapBundle\ServiceBinding;
|
||||||
|
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Method;
|
use BeSimple\SoapBundle\ServiceDefinition\Method;
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Strategy\MethodComplexType;
|
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Strategy\PropertyComplexType;
|
|
||||||
use BeSimple\SoapCommon\Definition\Type\ArrayOfType;
|
use BeSimple\SoapCommon\Definition\Type\ArrayOfType;
|
||||||
use BeSimple\SoapCommon\Definition\Type\ComplexType;
|
use BeSimple\SoapCommon\Definition\Type\ComplexType;
|
||||||
use BeSimple\SoapCommon\Definition\Type\TypeRepository;
|
use BeSimple\SoapCommon\Definition\Type\TypeRepository;
|
||||||
@ -55,7 +53,7 @@ class RpcLiteralRequestMessageBinder implements MessageBinderInterface
|
|||||||
$type = $this->typeRepository->getType($phpType);
|
$type = $this->typeRepository->getType($phpType);
|
||||||
if ($type instanceof ArrayOfType) {
|
if ($type instanceof ArrayOfType) {
|
||||||
$isArray = true;
|
$isArray = true;
|
||||||
$arrayType = $type;
|
$array = array();
|
||||||
|
|
||||||
$type = $this->typeRepository->getType($type->get('item')->getType());
|
$type = $this->typeRepository->getType($type->get('item')->getType());
|
||||||
}
|
}
|
||||||
@ -65,8 +63,6 @@ class RpcLiteralRequestMessageBinder implements MessageBinderInterface
|
|||||||
$phpType = $type->getPhpType();
|
$phpType = $type->getPhpType();
|
||||||
|
|
||||||
if ($isArray) {
|
if ($isArray) {
|
||||||
$array = array();
|
|
||||||
|
|
||||||
if (isset($message->item)) {
|
if (isset($message->item)) {
|
||||||
foreach ($message->item as $complexType) {
|
foreach ($message->item as $complexType) {
|
||||||
$array[] = $this->checkComplexType($phpType, $complexType);
|
$array[] = $this->checkComplexType($phpType, $complexType);
|
||||||
@ -116,9 +112,8 @@ class RpcLiteralRequestMessageBinder implements MessageBinderInterface
|
|||||||
$value = $this->processType($type->getType(), $value);
|
$value = $this->processType($type->getType(), $value);
|
||||||
|
|
||||||
$messageBinder->writeProperty($property, $value);
|
$messageBinder->writeProperty($property, $value);
|
||||||
}
|
} elseif (!$type->isNillable()) {
|
||||||
|
// @TODO use xmlType instead of phpType
|
||||||
if (!$type->isNillable() && null === $value) {
|
|
||||||
throw new \SoapFault('SOAP_ERROR_COMPLEX_TYPE', sprintf('"%s:%s" cannot be null.', ucfirst($phpType), $type->getName()));
|
throw new \SoapFault('SOAP_ERROR_COMPLEX_TYPE', sprintf('"%s:%s" cannot be null.', ucfirst($phpType), $type->getName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,6 @@
|
|||||||
namespace BeSimple\SoapBundle\ServiceBinding;
|
namespace BeSimple\SoapBundle\ServiceBinding;
|
||||||
|
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Method;
|
use BeSimple\SoapBundle\ServiceDefinition\Method;
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Strategy\PropertyComplexType;
|
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Strategy\MethodComplexType;
|
|
||||||
use BeSimple\SoapCommon\Definition\Type\ArrayOfType;
|
use BeSimple\SoapCommon\Definition\Type\ArrayOfType;
|
||||||
use BeSimple\SoapCommon\Definition\Type\ComplexType;
|
use BeSimple\SoapCommon\Definition\Type\ComplexType;
|
||||||
use BeSimple\SoapCommon\Definition\Type\TypeRepository;
|
use BeSimple\SoapCommon\Definition\Type\TypeRepository;
|
||||||
@ -44,7 +42,6 @@ class RpcLiteralResponseMessageBinder implements MessageBinderInterface
|
|||||||
$type = $this->typeRepository->getType($phpType);
|
$type = $this->typeRepository->getType($phpType);
|
||||||
if ($type instanceof ArrayOfType) {
|
if ($type instanceof ArrayOfType) {
|
||||||
$isArray = true;
|
$isArray = true;
|
||||||
$arrayType = $type;
|
|
||||||
|
|
||||||
$type = $this->typeRepository->getType($type->get('item')->getType());
|
$type = $this->typeRepository->getType($type->get('item')->getType());
|
||||||
}
|
}
|
||||||
@ -88,7 +85,7 @@ class RpcLiteralResponseMessageBinder implements MessageBinderInterface
|
|||||||
$this->messageRefs[$hash] = $message;
|
$this->messageRefs[$hash] = $message;
|
||||||
|
|
||||||
if (!$message instanceof $phpType) {
|
if (!$message instanceof $phpType) {
|
||||||
throw new \InvalidArgumentException(sprintf('The instance class must be "%s", "%s" given.', get_class($message), $phpType));
|
throw new \InvalidArgumentException(sprintf('The instance class must be "%s", "%s" given.', $phpType, get_class($message)));
|
||||||
}
|
}
|
||||||
|
|
||||||
$messageBinder = new MessageBinder($message);
|
$messageBinder = new MessageBinder($message);
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
|
|
||||||
namespace BeSimple\SoapBundle\ServiceBinding;
|
namespace BeSimple\SoapBundle\ServiceBinding;
|
||||||
|
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Header;
|
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Definition;
|
use BeSimple\SoapBundle\ServiceDefinition\Definition;
|
||||||
use BeSimple\SoapBundle\Soap\SoapHeader;
|
use BeSimple\SoapBundle\Soap\SoapHeader;
|
||||||
|
|
||||||
|
@ -21,8 +21,6 @@ use BeSimple\SoapCommon\Definition\Type\TypeRepository;
|
|||||||
*/
|
*/
|
||||||
class Definition extends BaseDefinition
|
class Definition extends BaseDefinition
|
||||||
{
|
{
|
||||||
private $complexTypes;
|
|
||||||
|
|
||||||
public function __construct(TypeRepository $typeRepository)
|
public function __construct(TypeRepository $typeRepository)
|
||||||
{
|
{
|
||||||
$this->typeRepository = $typeRepository;
|
$this->typeRepository = $typeRepository;
|
||||||
|
@ -16,11 +16,8 @@ use BeSimple\SoapBundle\ServiceDefinition as Definition;
|
|||||||
use BeSimple\SoapBundle\ServiceDefinition\Annotation;
|
use BeSimple\SoapBundle\ServiceDefinition\Annotation;
|
||||||
use BeSimple\SoapCommon\Definition\Type\ComplexType;
|
use BeSimple\SoapCommon\Definition\Type\ComplexType;
|
||||||
use BeSimple\SoapCommon\Definition\Type\TypeRepository;
|
use BeSimple\SoapCommon\Definition\Type\TypeRepository;
|
||||||
|
|
||||||
use Doctrine\Common\Annotations\Reader;
|
use Doctrine\Common\Annotations\Reader;
|
||||||
|
|
||||||
use Symfony\Component\Config\Loader\Loader;
|
use Symfony\Component\Config\Loader\Loader;
|
||||||
use Symfony\Component\Config\Loader\LoaderResolverInterface;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AnnotationClassLoader loads ServiceDefinition from a PHP class and its methods.
|
* AnnotationClassLoader loads ServiceDefinition from a PHP class and its methods.
|
||||||
@ -91,7 +88,6 @@ class AnnotationClassLoader extends Loader
|
|||||||
|
|
||||||
$serviceMethod = new Definition\Method(
|
$serviceMethod = new Definition\Method(
|
||||||
$annotation->getValue(),
|
$annotation->getValue(),
|
||||||
$this->typeRepository,
|
|
||||||
$this->getController($class, $method, $annotation)
|
$this->getController($class, $method, $annotation)
|
||||||
);
|
);
|
||||||
} elseif ($annotation instanceof Annotation\Result) {
|
} elseif ($annotation instanceof Annotation\Result) {
|
||||||
@ -144,30 +140,6 @@ class AnnotationClassLoader extends Loader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param \ReflectionMethod $method
|
|
||||||
* @param \BeSimple\SoapBundle\ServiceDefinition\Annotation\Param $annotation
|
|
||||||
*
|
|
||||||
* @return \BeSimple\SoapBundle\ServiceDefinition\Type
|
|
||||||
*/
|
|
||||||
private function getArgumentType(\ReflectionMethod $method, Annotation\Param $annotation)
|
|
||||||
{
|
|
||||||
$phpType = $annotation->getPhpType();
|
|
||||||
$xmlType = $annotation->getXmlType();
|
|
||||||
|
|
||||||
if (null === $phpType) {
|
|
||||||
foreach ($method->getParameters() as $param) {
|
|
||||||
if ($param->name === $annotation->getName()) {
|
|
||||||
$phpType = $param->getClass()->name;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Definition\Type($phpType, $xmlType);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function loadType($phpType)
|
private function loadType($phpType)
|
||||||
{
|
{
|
||||||
if (false !== $arrayOf = $this->typeRepository->getArrayOf($phpType)) {
|
if (false !== $arrayOf = $this->typeRepository->getArrayOf($phpType)) {
|
||||||
@ -177,7 +149,7 @@ class AnnotationClassLoader extends Loader
|
|||||||
if (!$this->typeRepository->hasType($phpType)) {
|
if (!$this->typeRepository->hasType($phpType)) {
|
||||||
$complexTypeResolver = $this->resolve($phpType, 'annotation_complextype');
|
$complexTypeResolver = $this->resolve($phpType, 'annotation_complextype');
|
||||||
if (!$complexTypeResolver) {
|
if (!$complexTypeResolver) {
|
||||||
throw new Exception();
|
throw new \Exception();
|
||||||
}
|
}
|
||||||
|
|
||||||
$loaded = $complexTypeResolver->load($phpType);
|
$loaded = $complexTypeResolver->load($phpType);
|
||||||
|
@ -16,7 +16,6 @@ use BeSimple\SoapBundle\ServiceDefinition\ServiceDefinition;
|
|||||||
|
|
||||||
use Symfony\Component\Config\FileLocator;
|
use Symfony\Component\Config\FileLocator;
|
||||||
use Symfony\Component\Config\Loader\FileLoader;
|
use Symfony\Component\Config\Loader\FileLoader;
|
||||||
use Symfony\Component\Config\Resource\FileResource;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AnnotationFileLoader loads ServiceDefinition from annotations set
|
* AnnotationFileLoader loads ServiceDefinition from annotations set
|
||||||
@ -62,7 +61,7 @@ class AnnotationFileLoader extends FileLoader
|
|||||||
$path = $this->locator->locate($file);
|
$path = $this->locator->locate($file);
|
||||||
|
|
||||||
if ($class = $this->findClass($path)) {
|
if ($class = $this->findClass($path)) {
|
||||||
return $definition = $this->loader->load($class, $type);
|
return $this->loader->load($class, $type);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -23,9 +23,9 @@ class Method extends BaseMethod
|
|||||||
{
|
{
|
||||||
private $controller;
|
private $controller;
|
||||||
|
|
||||||
public function __construct($name, TypeRepository $typeRepository, $controller)
|
public function __construct($name, $controller)
|
||||||
{
|
{
|
||||||
parent::__construct($name, $typeRepository);
|
parent::__construct($name);
|
||||||
|
|
||||||
$this->controller = $controller;
|
$this->controller = $controller;
|
||||||
}
|
}
|
||||||
|
@ -11,10 +11,7 @@
|
|||||||
namespace BeSimple\SoapBundle\Soap;
|
namespace BeSimple\SoapBundle\Soap;
|
||||||
|
|
||||||
use BeSimple\SoapBundle\Util\Collection;
|
use BeSimple\SoapBundle\Util\Collection;
|
||||||
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
use Zend\Mime\Mime;
|
|
||||||
use Zend\Mime\Message;
|
use Zend\Mime\Message;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -11,14 +11,10 @@
|
|||||||
|
|
||||||
namespace BeSimple\SoapBundle;
|
namespace BeSimple\SoapBundle;
|
||||||
|
|
||||||
use BeSimple\SoapBundle\ServiceBinding\MessageBinderInterface;
|
|
||||||
use BeSimple\SoapBundle\ServiceBinding\ServiceBinder;
|
use BeSimple\SoapBundle\ServiceBinding\ServiceBinder;
|
||||||
use BeSimple\SoapBundle\ServiceDefinition\Dumper\DumperInterface;
|
|
||||||
|
|
||||||
use BeSimple\SoapCommon\Converter\TypeConverterCollection;
|
use BeSimple\SoapCommon\Converter\TypeConverterCollection;
|
||||||
use BeSimple\SoapWsdl\Dumper\Dumper;
|
use BeSimple\SoapWsdl\Dumper\Dumper;
|
||||||
use BeSimple\SoapServer\SoapServerBuilder;
|
use BeSimple\SoapServer\SoapServerBuilder;
|
||||||
|
|
||||||
use Symfony\Component\Config\ConfigCache;
|
use Symfony\Component\Config\ConfigCache;
|
||||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||||
|
|
||||||
@ -30,8 +26,6 @@ use Symfony\Component\Config\Loader\LoaderInterface;
|
|||||||
*/
|
*/
|
||||||
class WebServiceContext
|
class WebServiceContext
|
||||||
{
|
{
|
||||||
private $converterRepository;
|
|
||||||
|
|
||||||
private $options;
|
private $options;
|
||||||
|
|
||||||
private $serviceDefinition;
|
private $serviceDefinition;
|
||||||
@ -84,7 +78,7 @@ class WebServiceContext
|
|||||||
$definition->setOption('location', $endpoint);
|
$definition->setOption('location', $endpoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
$dumper = new Dumper($definition);
|
$dumper = new Dumper($definition, array('stylesheet' => $this->options['wsdl_stylesheet']));
|
||||||
$cache->write($dumper->dump());
|
$cache->write($dumper->dump());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,13 +88,19 @@ class Curl
|
|||||||
curl_setopt($this->ch, CURLOPT_PROXYUSERPWD, $options['proxy_user'] . ':' . $options['proxy_password']);
|
curl_setopt($this->ch, CURLOPT_PROXYUSERPWD, $options['proxy_user'] . ':' . $options['proxy_password']);
|
||||||
}
|
}
|
||||||
if (isset($options['login'])) {
|
if (isset($options['login'])) {
|
||||||
curl_setopt($this->ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
|
curl_setopt($this->ch, CURLOPT_HTTPAUTH, isset($options['extra_options']['http_auth']) ? $options['extra_options']['http_auth'] : CURLAUTH_ANY);
|
||||||
curl_setopt($this->ch, CURLOPT_USERPWD, $options['login'].':'.$options['password']);
|
curl_setopt($this->ch, CURLOPT_USERPWD, $options['login'].':'.$options['password']);
|
||||||
}
|
}
|
||||||
if (isset($options['local_cert'])) {
|
if (isset($options['local_cert'])) {
|
||||||
curl_setopt($this->ch, CURLOPT_SSLCERT, $options['local_cert']);
|
curl_setopt($this->ch, CURLOPT_SSLCERT, $options['local_cert']);
|
||||||
curl_setopt($this->ch, CURLOPT_SSLCERTPASSWD, $options['passphrase']);
|
curl_setopt($this->ch, CURLOPT_SSLCERTPASSWD, $options['passphrase']);
|
||||||
}
|
}
|
||||||
|
if (isset($options['ca_info'])) {
|
||||||
|
curl_setopt($this->ch, CURLOPT_CAINFO, $options['ca_info']);
|
||||||
|
}
|
||||||
|
if (isset($options['ca_path'])) {
|
||||||
|
curl_setopt($this->ch, CURLOPT_CAPATH, $options['ca_path']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -90,7 +90,7 @@ class MimeFilter implements SoapRequestFilter, SoapResponseFilter
|
|||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
$headers = $multipart->getHeadersForHttp();
|
$headers = $multipart->getHeadersForHttp();
|
||||||
list($name, $contentType) = explode(': ', $headers[0]);
|
list(, $contentType) = explode(': ', $headers[0]);
|
||||||
|
|
||||||
$request->setContentType($contentType);
|
$request->setContentType($contentType);
|
||||||
}
|
}
|
||||||
@ -135,4 +135,4 @@ class MimeFilter implements SoapRequestFilter, SoapResponseFilter
|
|||||||
$response->setAttachments($attachmentsRecieved);
|
$response->setAttachments($attachmentsRecieved);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,6 +113,11 @@ class SoapClient extends \SoapClient
|
|||||||
$this->cliWebserverWorkaround = $options['cli_webserver_workaround'];
|
$this->cliWebserverWorkaround = $options['cli_webserver_workaround'];
|
||||||
}
|
}
|
||||||
$this->curl = new Curl($options);
|
$this->curl = new Curl($options);
|
||||||
|
|
||||||
|
if (isset($options['extra_options'])) {
|
||||||
|
unset($options['extra_options']);
|
||||||
|
}
|
||||||
|
|
||||||
$wsdlFile = $this->loadWsdl($wsdl, $options);
|
$wsdlFile = $this->loadWsdl($wsdl, $options);
|
||||||
// TODO $wsdlHandler = new WsdlHandler($wsdlFile, $this->soapVersion);
|
// TODO $wsdlHandler = new WsdlHandler($wsdlFile, $this->soapVersion);
|
||||||
$this->soapKernel = new SoapKernel();
|
$this->soapKernel = new SoapKernel();
|
||||||
@ -173,6 +178,8 @@ class SoapClient extends \SoapClient
|
|||||||
$headers = array();
|
$headers = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$headers = $this->filterRequestHeaders($soapRequest, $headers);
|
||||||
|
|
||||||
// execute HTTP request with cURL
|
// execute HTTP request with cURL
|
||||||
$responseSuccessfull = $this->curl->exec(
|
$responseSuccessfull = $this->curl->exec(
|
||||||
$location,
|
$location,
|
||||||
@ -253,6 +260,19 @@ class SoapClient extends \SoapClient
|
|||||||
return $soapResponse;
|
return $soapResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters HTTP headers which will be sent
|
||||||
|
*
|
||||||
|
* @param SoapRequest $soapRequest SOAP request object
|
||||||
|
* @param array $headers An array of HTTP headers
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function filterRequestHeaders(SoapRequest $soapRequest, array $headers)
|
||||||
|
{
|
||||||
|
return $headers;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get last request HTTP headers.
|
* Get last request HTTP headers.
|
||||||
*
|
*
|
||||||
@ -354,7 +374,7 @@ class SoapClient extends \SoapClient
|
|||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
private function loadWsdl($wsdl, array $options)
|
protected function loadWsdl($wsdl, array $options)
|
||||||
{
|
{
|
||||||
// option to resolve wsdl/xsd includes
|
// option to resolve wsdl/xsd includes
|
||||||
$resolveRemoteIncludes = true;
|
$resolveRemoteIncludes = true;
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
namespace BeSimple\SoapClient;
|
namespace BeSimple\SoapClient;
|
||||||
|
|
||||||
use BeSimple\SoapCommon\SoapResponse as CommonSoapResponse;
|
use BeSimple\SoapCommon\SoapResponse as CommonSoapResponse;
|
||||||
use BeSimple\SoapCommon\SoapMessage;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SoapResponse class for SoapClient. Provides factory function for response object.
|
* SoapResponse class for SoapClient. Provides factory function for response object.
|
||||||
@ -44,4 +43,4 @@ class SoapResponse extends CommonSoapResponse
|
|||||||
|
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,16 +14,12 @@ namespace BeSimple\SoapClient;
|
|||||||
|
|
||||||
use ass\XmlSecurity\DSig as XmlSecurityDSig;
|
use ass\XmlSecurity\DSig as XmlSecurityDSig;
|
||||||
use ass\XmlSecurity\Enc as XmlSecurityEnc;
|
use ass\XmlSecurity\Enc as XmlSecurityEnc;
|
||||||
use ass\XmlSecurity\Key as XmlSecurityKey;
|
|
||||||
use ass\XmlSecurity\Pem as XmlSecurityPem;
|
|
||||||
|
|
||||||
use BeSimple\SoapCommon\FilterHelper;
|
use BeSimple\SoapCommon\FilterHelper;
|
||||||
use BeSimple\SoapCommon\Helper;
|
use BeSimple\SoapCommon\Helper;
|
||||||
use BeSimple\SoapCommon\SoapRequest as CommonSoapRequest;
|
use BeSimple\SoapCommon\SoapRequest as CommonSoapRequest;
|
||||||
use BeSimple\SoapCommon\SoapRequestFilter;
|
use BeSimple\SoapCommon\SoapRequestFilter;
|
||||||
use BeSimple\SoapCommon\SoapResponse as CommonSoapResponse;
|
use BeSimple\SoapCommon\SoapResponse as CommonSoapResponse;
|
||||||
use BeSimple\SoapCommon\SoapResponseFilter;
|
use BeSimple\SoapCommon\SoapResponseFilter;
|
||||||
use BeSimple\SoapCommon\WsSecurityKey;
|
|
||||||
use BeSimple\SoapCommon\WsSecurityFilterClientServer;
|
use BeSimple\SoapCommon\WsSecurityFilterClientServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -214,7 +210,7 @@ class WsSecurityFilter extends WsSecurityFilterClientServer implements SoapReque
|
|||||||
$referenceList = XmlSecurityEnc::createReferenceList($encryptedKey);
|
$referenceList = XmlSecurityEnc::createReferenceList($encryptedKey);
|
||||||
// token reference to encrypted key
|
// token reference to encrypted key
|
||||||
$keyInfo = $this->createKeyInfo($filterHelper, self::TOKEN_REFERENCE_SECURITY_TOKEN, $guid);
|
$keyInfo = $this->createKeyInfo($filterHelper, self::TOKEN_REFERENCE_SECURITY_TOKEN, $guid);
|
||||||
$nodes = $this->createNodeListForEncryption($dom, $security);
|
$nodes = $this->createNodeListForEncryption($dom);
|
||||||
foreach ($nodes as $node) {
|
foreach ($nodes as $node) {
|
||||||
$type = XmlSecurityEnc::ELEMENT;
|
$type = XmlSecurityEnc::ELEMENT;
|
||||||
if ($node->localName == 'Body') {
|
if ($node->localName == 'Body') {
|
||||||
@ -274,4 +270,4 @@ class WsSecurityFilter extends WsSecurityFilterClientServer implements SoapReque
|
|||||||
$security->parentNode->removeChild($security);
|
$security->parentNode->removeChild($security);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,13 +14,8 @@ namespace BeSimple\SoapClient;
|
|||||||
|
|
||||||
use BeSimple\SoapCommon\FilterHelper;
|
use BeSimple\SoapCommon\FilterHelper;
|
||||||
use BeSimple\SoapCommon\Helper;
|
use BeSimple\SoapCommon\Helper;
|
||||||
use BeSimple\SoapCommon\Mime\MultiPart as MimeMultiPart;
|
|
||||||
use BeSimple\SoapCommon\Mime\Parser as MimeParser;
|
|
||||||
use BeSimple\SoapCommon\Mime\Part as MimePart;
|
|
||||||
use BeSimple\SoapCommon\SoapRequest;
|
use BeSimple\SoapCommon\SoapRequest;
|
||||||
use BeSimple\SoapCommon\SoapRequestFilter;
|
use BeSimple\SoapCommon\SoapRequestFilter;
|
||||||
use BeSimple\SoapCommon\SoapResponse;
|
|
||||||
use BeSimple\SoapCommon\SoapResponseFilter;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* XML MIME filter that fixes the namespace of xmime:contentType attribute.
|
* XML MIME filter that fixes the namespace of xmime:contentType attribute.
|
||||||
@ -72,4 +67,4 @@ class XmlMimeFilter implements SoapRequestFilter
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
|
|
||||||
namespace BeSimple\SoapCommon\Converter;
|
namespace BeSimple\SoapCommon\Converter;
|
||||||
|
|
||||||
use BeSimple\SoapCommon\Helper;
|
|
||||||
use BeSimple\SoapCommon\Mime\Part as MimePart;
|
use BeSimple\SoapCommon\Mime\Part as MimePart;
|
||||||
use BeSimple\SoapCommon\SoapKernel;
|
use BeSimple\SoapCommon\SoapKernel;
|
||||||
use BeSimple\SoapCommon\Converter\SoapKernelAwareInterface;
|
use BeSimple\SoapCommon\Converter\SoapKernelAwareInterface;
|
||||||
|
@ -26,14 +26,14 @@ class Method
|
|||||||
private $output;
|
private $output;
|
||||||
private $fault;
|
private $fault;
|
||||||
|
|
||||||
public function __construct($name, TypeRepository $typeRepository)
|
public function __construct($name)
|
||||||
{
|
{
|
||||||
$this->name = $name;
|
$this->name = $name;
|
||||||
|
|
||||||
$this->headers = new Message($name.'Header', $typeRepository);
|
$this->headers = new Message($name.'Header');
|
||||||
$this->input = new Message($name.'Request', $typeRepository);
|
$this->input = new Message($name.'Request');
|
||||||
$this->output = new Message($name.'Response', $typeRepository);
|
$this->output = new Message($name.'Response');
|
||||||
$this->fault = new Message($name.'Fault', $typeRepository);
|
$this->fault = new Message($name.'Fault');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName()
|
public function getName()
|
||||||
|
@ -14,9 +14,6 @@
|
|||||||
namespace BeSimple\SoapCommon;
|
namespace BeSimple\SoapCommon;
|
||||||
|
|
||||||
use BeSimple\SoapCommon\Mime\Part as MimePart;
|
use BeSimple\SoapCommon\Mime\Part as MimePart;
|
||||||
|
|
||||||
use BeSimple\SoapCommon\Converter\MtomTypeConverter;
|
|
||||||
use BeSimple\SoapCommon\Converter\SwaTypeConverter;
|
|
||||||
use BeSimple\SoapCommon\SoapRequest;
|
use BeSimple\SoapCommon\SoapRequest;
|
||||||
use BeSimple\SoapCommon\SoapResponse;
|
use BeSimple\SoapCommon\SoapResponse;
|
||||||
use BeSimple\SoapCommon\SoapRequestFilter;
|
use BeSimple\SoapCommon\SoapRequestFilter;
|
||||||
@ -129,4 +126,4 @@ class SoapKernel
|
|||||||
$filter->filterResponse($response);
|
$filter->filterResponse($response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,6 @@
|
|||||||
|
|
||||||
namespace BeSimple\SoapCommon;
|
namespace BeSimple\SoapCommon;
|
||||||
|
|
||||||
use BeSimple\SoapCommon\Mime\Part as MimePart;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class for SoapRequest and SoapResponse.
|
* Base class for SoapRequest and SoapResponse.
|
||||||
*
|
*
|
||||||
@ -254,4 +252,4 @@ abstract class SoapMessage
|
|||||||
{
|
{
|
||||||
$this->version = $version;
|
$this->version = $version;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,13 +16,8 @@ use ass\XmlSecurity\DSig as XmlSecurityDSig;
|
|||||||
use ass\XmlSecurity\Enc as XmlSecurityEnc;
|
use ass\XmlSecurity\Enc as XmlSecurityEnc;
|
||||||
use ass\XmlSecurity\Key as XmlSecurityKey;
|
use ass\XmlSecurity\Key as XmlSecurityKey;
|
||||||
use ass\XmlSecurity\Pem as XmlSecurityPem;
|
use ass\XmlSecurity\Pem as XmlSecurityPem;
|
||||||
|
|
||||||
use BeSimple\SoapCommon\FilterHelper;
|
use BeSimple\SoapCommon\FilterHelper;
|
||||||
use BeSimple\SoapCommon\Helper;
|
use BeSimple\SoapCommon\Helper;
|
||||||
use BeSimple\SoapCommon\SoapRequest as CommonSoapRequest;
|
|
||||||
use BeSimple\SoapCommon\SoapRequestFilter;
|
|
||||||
use BeSimple\SoapCommon\SoapResponse as CommonSoapResponse;
|
|
||||||
use BeSimple\SoapCommon\SoapResponseFilter;
|
|
||||||
use BeSimple\SoapCommon\WsSecurityKey;
|
use BeSimple\SoapCommon\WsSecurityKey;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -247,11 +242,10 @@ abstract class WsSecurityFilterClientServer
|
|||||||
* Create a list of \DOMNodes that should be encrypted.
|
* Create a list of \DOMNodes that should be encrypted.
|
||||||
*
|
*
|
||||||
* @param \DOMDocument $dom DOMDocument to query
|
* @param \DOMDocument $dom DOMDocument to query
|
||||||
* @param \DOMElement $security Security element
|
|
||||||
*
|
*
|
||||||
* @return \DOMNodeList
|
* @return \DOMNodeList
|
||||||
*/
|
*/
|
||||||
protected function createNodeListForEncryption(\DOMDocument $dom, \DOMElement $security)
|
protected function createNodeListForEncryption(\DOMDocument $dom)
|
||||||
{
|
{
|
||||||
$xpath = new \DOMXPath($dom);
|
$xpath = new \DOMXPath($dom);
|
||||||
$xpath->registerNamespace('SOAP-ENV', $dom->documentElement->namespaceURI);
|
$xpath->registerNamespace('SOAP-ENV', $dom->documentElement->namespaceURI);
|
||||||
@ -355,4 +349,4 @@ abstract class WsSecurityFilterClientServer
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -174,7 +174,7 @@ class WsdlHandler
|
|||||||
return true;
|
return true;
|
||||||
// type/* match
|
// type/* match
|
||||||
} else {
|
} else {
|
||||||
list($ctype, $csubtype) = explode('/', $currentMimeType);
|
list($ctype) = explode('/', $currentMimeType);
|
||||||
foreach ($mimeTypes as $mimeType) {
|
foreach ($mimeTypes as $mimeType) {
|
||||||
list($type, $subtype) = explode('/', $mimeType);
|
list($type, $subtype) = explode('/', $mimeType);
|
||||||
if ($subtype == '*' && $type == $ctype) {
|
if ($subtype == '*' && $type == $ctype) {
|
||||||
@ -202,4 +202,4 @@ class WsdlHandler
|
|||||||
$this->domXpath->registerNamespace('soap', $this->wsdlSoapNamespace);
|
$this->domXpath->registerNamespace('soap', $this->wsdlSoapNamespace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,9 +130,9 @@ class MimeFilter implements SoapRequestFilter, SoapResponseFilter
|
|||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
$headers = $multipart->getHeadersForHttp();
|
$headers = $multipart->getHeadersForHttp();
|
||||||
list($name, $contentType) = explode(': ', $headers[0]);
|
list(, $contentType) = explode(': ', $headers[0]);
|
||||||
|
|
||||||
$response->setContentType($contentType);
|
$response->setContentType($contentType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,16 +14,12 @@ namespace BeSimple\SoapServer;
|
|||||||
|
|
||||||
use ass\XmlSecurity\DSig as XmlSecurityDSig;
|
use ass\XmlSecurity\DSig as XmlSecurityDSig;
|
||||||
use ass\XmlSecurity\Enc as XmlSecurityEnc;
|
use ass\XmlSecurity\Enc as XmlSecurityEnc;
|
||||||
use ass\XmlSecurity\Key as XmlSecurityKey;
|
|
||||||
use ass\XmlSecurity\Pem as XmlSecurityPem;
|
|
||||||
|
|
||||||
use BeSimple\SoapCommon\FilterHelper;
|
use BeSimple\SoapCommon\FilterHelper;
|
||||||
use BeSimple\SoapCommon\Helper;
|
use BeSimple\SoapCommon\Helper;
|
||||||
use BeSimple\SoapCommon\SoapRequest as CommonSoapRequest;
|
use BeSimple\SoapCommon\SoapRequest as CommonSoapRequest;
|
||||||
use BeSimple\SoapCommon\SoapRequestFilter;
|
use BeSimple\SoapCommon\SoapRequestFilter;
|
||||||
use BeSimple\SoapCommon\SoapResponse as CommonSoapResponse;
|
use BeSimple\SoapCommon\SoapResponse as CommonSoapResponse;
|
||||||
use BeSimple\SoapCommon\SoapResponseFilter;
|
use BeSimple\SoapCommon\SoapResponseFilter;
|
||||||
use BeSimple\SoapCommon\WsSecurityKey;
|
|
||||||
use BeSimple\SoapCommon\WsSecurityFilterClientServer;
|
use BeSimple\SoapCommon\WsSecurityFilterClientServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -230,7 +226,7 @@ class WsSecurityFilter extends WsSecurityFilterClientServer implements SoapReque
|
|||||||
$referenceList = XmlSecurityEnc::createReferenceList($encryptedKey);
|
$referenceList = XmlSecurityEnc::createReferenceList($encryptedKey);
|
||||||
// token reference to encrypted key
|
// token reference to encrypted key
|
||||||
$keyInfo = $this->createKeyInfo($filterHelper, self::TOKEN_REFERENCE_SECURITY_TOKEN, $guid);
|
$keyInfo = $this->createKeyInfo($filterHelper, self::TOKEN_REFERENCE_SECURITY_TOKEN, $guid);
|
||||||
$nodes = $this->createNodeListForEncryption($dom, $security);
|
$nodes = $this->createNodeListForEncryption($dom);
|
||||||
foreach ($nodes as $node) {
|
foreach ($nodes as $node) {
|
||||||
$type = XmlSecurityEnc::ELEMENT;
|
$type = XmlSecurityEnc::ELEMENT;
|
||||||
if ($node->localName == 'Body') {
|
if ($node->localName == 'Body') {
|
||||||
@ -241,4 +237,4 @@ class WsSecurityFilter extends WsSecurityFilterClientServer implements SoapReque
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,11 +14,6 @@ namespace BeSimple\SoapServer;
|
|||||||
|
|
||||||
use BeSimple\SoapCommon\FilterHelper;
|
use BeSimple\SoapCommon\FilterHelper;
|
||||||
use BeSimple\SoapCommon\Helper;
|
use BeSimple\SoapCommon\Helper;
|
||||||
use BeSimple\SoapCommon\Mime\MultiPart as MimeMultiPart;
|
|
||||||
use BeSimple\SoapCommon\Mime\Parser as MimeParser;
|
|
||||||
use BeSimple\SoapCommon\Mime\Part as MimePart;
|
|
||||||
use BeSimple\SoapCommon\SoapRequest;
|
|
||||||
use BeSimple\SoapCommon\SoapRequestFilter;
|
|
||||||
use BeSimple\SoapCommon\SoapResponse;
|
use BeSimple\SoapCommon\SoapResponse;
|
||||||
use BeSimple\SoapCommon\SoapResponseFilter;
|
use BeSimple\SoapCommon\SoapResponseFilter;
|
||||||
|
|
||||||
@ -72,4 +67,4 @@ class XmlMimeFilter implements SoapResponseFilter
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,6 @@ namespace BeSimple\SoapWsdl\Dumper;
|
|||||||
|
|
||||||
use BeSimple\SoapCommon\Definition\Definition;
|
use BeSimple\SoapCommon\Definition\Definition;
|
||||||
use BeSimple\SoapCommon\Definition\Method;
|
use BeSimple\SoapCommon\Definition\Method;
|
||||||
use BeSimple\SoapCommon\Definition\Part;
|
|
||||||
use BeSimple\SoapCommon\Definition\Type\ArrayOfType;
|
use BeSimple\SoapCommon\Definition\Type\ArrayOfType;
|
||||||
use BeSimple\SoapCommon\Definition\Type\ComplexType;
|
use BeSimple\SoapCommon\Definition\Type\ComplexType;
|
||||||
|
|
||||||
@ -70,6 +69,7 @@ class Dumper
|
|||||||
'version12_class' => 'BeSimple\\SoapWsdl\\Dumper\\Version12',
|
'version12_class' => 'BeSimple\\SoapWsdl\\Dumper\\Version12',
|
||||||
'version11_name' => $this->definition->getName(),
|
'version11_name' => $this->definition->getName(),
|
||||||
'version12_name' => $this->definition->getName().'12',
|
'version12_name' => $this->definition->getName().'12',
|
||||||
|
'stylesheet' => null,
|
||||||
);
|
);
|
||||||
|
|
||||||
$invalid = array();
|
$invalid = array();
|
||||||
@ -124,6 +124,8 @@ class Dumper
|
|||||||
|
|
||||||
$this->document->formatOutput = true;
|
$this->document->formatOutput = true;
|
||||||
|
|
||||||
|
$this->addStylesheet();
|
||||||
|
|
||||||
return $this->document->saveXML();
|
return $this->document->saveXML();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,7 +189,7 @@ class Dumper
|
|||||||
protected function addMessages(array $messages)
|
protected function addMessages(array $messages)
|
||||||
{
|
{
|
||||||
foreach ($messages as $message) {
|
foreach ($messages as $message) {
|
||||||
if ($message->isEmpty()) {
|
if (preg_match('#Header$#', $message->getName()) && $message->isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,7 +285,7 @@ class Dumper
|
|||||||
$operation->setAttribute('name', $method->getName());
|
$operation->setAttribute('name', $method->getName());
|
||||||
|
|
||||||
foreach (array('input' => $method->getInput(), 'output' => $method->getOutput(), 'fault' => $method->getFault()) as $type => $message) {
|
foreach (array('input' => $method->getInput(), 'output' => $method->getOutput(), 'fault' => $method->getFault()) as $type => $message) {
|
||||||
if ($message->isEmpty()) {
|
if ('fault' === $type && $message->isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,6 +300,15 @@ class Dumper
|
|||||||
return $operation;
|
return $operation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function addStylesheet()
|
||||||
|
{
|
||||||
|
if ($this->options['stylesheet']) {
|
||||||
|
$stylesheet = $this->document->createProcessingInstruction('xml-stylesheet', sprintf('type="text/xsl" href="%s"', $this->options['stylesheet']));
|
||||||
|
|
||||||
|
$this->document->insertBefore($stylesheet, $this->document->documentElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected function getVersion($version)
|
protected function getVersion($version)
|
||||||
{
|
{
|
||||||
if (\SOAP_1_2 === $version) {
|
if (\SOAP_1_2 === $version) {
|
||||||
|
Reference in New Issue
Block a user