added basic soap processing classes discussed in #2
This commit is contained in:
parent
f95a5177b1
commit
6ac3493bc2
|
@ -0,0 +1,82 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the BeSimpleSoapCommon.
|
||||
*
|
||||
* (c) Christian Kerl <christian-kerl@web.de>
|
||||
* (c) Francis Besset <francis.besset@gmail.com>
|
||||
* (c) Andreas Schamberger <mail@andreass.net>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace BeSimple\SoapCommon;
|
||||
|
||||
use BeSimple\SoapCommon\SoapRequest;
|
||||
use BeSimple\SoapCommon\SoapResponse;
|
||||
|
||||
use BeSimple\SoapCommon\SoapRequestFilter;
|
||||
use BeSimple\SoapCommon\SoapResponseFilter;
|
||||
|
||||
/**
|
||||
* SoapKernel provides methods to pre- and post-process SoapRequests and SoapResponses using
|
||||
* chains of SoapRequestFilter and SoapResponseFilter objects (roughly following
|
||||
* the chain-of-responsibility pattern).
|
||||
*
|
||||
* @author Christian Kerl <christian-kerl@web.de>
|
||||
*/
|
||||
class SoapKernel
|
||||
{
|
||||
private $requestFilters = array();
|
||||
private $responseFilters = array();
|
||||
|
||||
/**
|
||||
* Registers the given object either as filter for SoapRequests or as filter for SoapResponses
|
||||
* or as filter for both depending on the implemented interfaces. Inner filters have to be registered
|
||||
* before outer filters. This means the order is as follows: RequestFilter2->RequestFilter1 and
|
||||
* ResponseFilter1->ResponseFilter2.
|
||||
*
|
||||
* TODO: add priority mechanism to ensure correct order of filters
|
||||
*
|
||||
* @param SoapRequestFilter|SoapResponseFilter $filter
|
||||
*/
|
||||
public function registerFilter($filter)
|
||||
{
|
||||
if($filter instanceof SoapRequestFilter)
|
||||
{
|
||||
array_unshift($this->requestFilters, $filter);
|
||||
}
|
||||
|
||||
if($filter instanceof SoapResponseFilter)
|
||||
{
|
||||
array_push($this->responseFilters, $filter);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies all registered SoapRequestFilter to the given SoapRequest.
|
||||
*
|
||||
* @param SoapRequest $request
|
||||
*/
|
||||
public function filterRequest(SoapRequest $request)
|
||||
{
|
||||
foreach($this->requestFilters as $filter)
|
||||
{
|
||||
$filter->filterRequest($request);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies all registered SoapResponseFilter to the given SoapResponse.
|
||||
*
|
||||
* @param SoapResponse $response
|
||||
*/
|
||||
public function filterResponse(SoapResponse $response)
|
||||
{
|
||||
foreach($this->responseFilters as $filter)
|
||||
{
|
||||
$filter->filterRequest($response);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the BeSimpleSoapCommon.
|
||||
*
|
||||
* (c) Christian Kerl <christian-kerl@web.de>
|
||||
* (c) Francis Besset <francis.besset@gmail.com>
|
||||
* (c) Andreas Schamberger <mail@andreass.net>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace BeSimple\SoapCommon;
|
||||
|
||||
/**
|
||||
* @author Christian Kerl <christian-kerl@web.de>
|
||||
*/
|
||||
abstract class SoapMessage
|
||||
{
|
||||
const CONTENT_TYPE_HEADER = 'CONTENT_TYPE';
|
||||
const ACTION_HEADER = 'HTTP_SOAPACTION';
|
||||
|
||||
static protected $versionToContentTypeMap = array(
|
||||
SOAP_1_1 => 'text/xml; charset=%s',
|
||||
SOAP_1_2 => 'application/soap+xml; charset=%s'
|
||||
);
|
||||
|
||||
static public function getContentTypeForVersion($version, $encoding = 'utf-8')
|
||||
{
|
||||
if(!in_array($soapVersion, array(SOAP_1_1, SOAP_1_2)))
|
||||
{
|
||||
throw new \InvalidArgumentException("The 'version' argument has to be either 'SOAP_1_1' or 'SOAP_1_2'!");
|
||||
}
|
||||
|
||||
return sprintf(self::$versionToContentTypeMap[$version], $encoding);
|
||||
}
|
||||
|
||||
protected $contentType;
|
||||
protected $content;
|
||||
|
||||
protected $contentDomDocument = null;
|
||||
|
||||
protected $version;
|
||||
protected $action;
|
||||
|
||||
public function getContentType()
|
||||
{
|
||||
return $this->contentType;
|
||||
}
|
||||
|
||||
public function setContentType($contentType)
|
||||
{
|
||||
$this->contentType = $contentType;
|
||||
}
|
||||
|
||||
public function getContent()
|
||||
{
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
public function setContent($content)
|
||||
{
|
||||
$this->content = $content;
|
||||
}
|
||||
|
||||
public function getContentDocument()
|
||||
{
|
||||
if(null === $this->contentDomDocument)
|
||||
{
|
||||
$this->contentDomDocument = new \DOMDocument();
|
||||
$this->contentDomDocument->loadXML($this->content);
|
||||
}
|
||||
|
||||
return $this->contentDomDocument;
|
||||
}
|
||||
|
||||
public function getVersion()
|
||||
{
|
||||
return $this->version;
|
||||
}
|
||||
|
||||
public function setVersion($version)
|
||||
{
|
||||
$this->version = $version;
|
||||
}
|
||||
|
||||
public function getAction()
|
||||
{
|
||||
return $this->action;
|
||||
}
|
||||
|
||||
public function setAction($action)
|
||||
{
|
||||
$this->action = $action;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the BeSimpleSoapCommon.
|
||||
*
|
||||
* (c) Christian Kerl <christian-kerl@web.de>
|
||||
* (c) Francis Besset <francis.besset@gmail.com>
|
||||
* (c) Andreas Schamberger <mail@andreass.net>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace BeSimple\SoapCommon;
|
||||
|
||||
use BeSimple\SoapCommon\SoapMessage;
|
||||
|
||||
/**
|
||||
* @author Christian Kerl <christian-kerl@web.de>
|
||||
*/
|
||||
class SoapRequest extends SoapMessage
|
||||
{
|
||||
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the BeSimpleSoapCommon.
|
||||
*
|
||||
* (c) Christian Kerl <christian-kerl@web.de>
|
||||
* (c) Francis Besset <francis.besset@gmail.com>
|
||||
* (c) Andreas Schamberger <mail@andreass.net>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace BeSimple\SoapCommon;
|
||||
|
||||
use BeSimple\SoapCommon\SoapRequest;
|
||||
|
||||
/**
|
||||
* @author Christian Kerl <christian-kerl@web.de>
|
||||
*/
|
||||
interface SoapRequestFilter
|
||||
{
|
||||
public function filterRequest(SoapRequest $request);
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the BeSimpleSoapCommon.
|
||||
*
|
||||
* (c) Christian Kerl <christian-kerl@web.de>
|
||||
* (c) Francis Besset <francis.besset@gmail.com>
|
||||
* (c) Andreas Schamberger <mail@andreass.net>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace BeSimple\SoapCommon;
|
||||
|
||||
use BeSimple\SoapCommon\SoapMessage;
|
||||
|
||||
/**
|
||||
* @author Christian Kerl <christian-kerl@web.de>
|
||||
*/
|
||||
class SoapResponse extends SoapMessage
|
||||
{
|
||||
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the BeSimpleSoapCommon.
|
||||
*
|
||||
* (c) Christian Kerl <christian-kerl@web.de>
|
||||
* (c) Francis Besset <francis.besset@gmail.com>
|
||||
* (c) Andreas Schamberger <mail@andreass.net>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace BeSimple\SoapCommon;
|
||||
|
||||
use BeSimple\SoapCommon\SoapResponse;
|
||||
|
||||
/**
|
||||
* @author Christian Kerl <christian-kerl@web.de>
|
||||
*/
|
||||
interface SoapResponseFilter
|
||||
{
|
||||
public function filterResponse(SoapResponse $response);
|
||||
}
|
Loading…
Reference in New Issue