SOAP server. Handle by controller.

2008-03-27 Thread wDevil

I want to make SOAP service with WSDL generation like this
http://bakery.cakephp.org/articles/view/a-component-to-help-creating-soap-services,
but with handle by controller like this
http://bakery.cakephp.org/articles/view/implementing-soap-on-cakephp.
With authorization.

app/controllers/components/soap.php
?php
vendor('wshelper/lib/soap/IPReflectionClass.class');
vendor('wshelper/lib/soap/IPReflectionCommentParser.class');
vendor('wshelper/lib/soap/IPXMLSchema.class');
vendor('wshelper/lib/soap/IPReflectionMethod.class');
vendor('wshelper/lib/soap/WSDLStruct.class');
vendor('wshelper/lib/soap/WSDLException.class');

/**
 * Class SoapComponent
 *
 * Generate WSDL and handle SOAP calls
 */
class SoapComponent extends Component
{
var $params = array();

function initialize($controller)
{
$this-params = $controller-params;
}

/**
 * Get WSDL for specified model.
 *
 * @param string $modelClass : model name in camel case
 * @param string $serviceMethod : method of the controller that
will handle SOAP calls
 */
function getWSDL($modelId, $serviceMethod = 'call')
{
$modelClass = $this-__getModelClass($modelId);
$expireTime = '+1 year';
$cachePath = $modelClass . '.wsdl';

// Check cache if exist
$wsdl = cache($cachePath, null, $expireTime);

// If DEBUG  0, compare cache modified time to model file
modified time
if ((Configure::read()  0)  (! is_null($wsdl))) {

$cacheFile = CACHE . $cachePath;
if (is_file($cacheFile)) {
$modelMtime = filemtime($this-
__getModelFile($modelId));
$cacheMtime = filemtime(CACHE . $cachePath);
if ($modelMtime  $cacheMtime) {
$wsdl = null;
}
}

}

// Generate WSDL if not cached
if (is_null($wsdl)) {
App::import('Controller',array($modelClass));
$refl = new IPReflectionClass($this-
__getFullNameClass($modelId));

$controllerName = $this-params['controller'];
$serviceURL = Router::url(/$controllerName/
$serviceMethod, true);

$wsdlStruct = new WSDLStruct('http://
schema.example.com',
 $serviceURL . '/' .
$modelId,
 SOAP_RPC,
 SOAP_LITERAL);
$wsdlStruct-setService($refl);
try {
$wsdl = $wsdlStruct-generateDocument();
// cache($cachePath, $wsdl, $expireTime);
} catch (WSDLException $exception) {
if (Configure::read()  0) {
$exception-Display();
exit();
} else {
return null;
}
}
}

return $wsdl;
}

/**
 * Handle SOAP service call
 *
 * @param string $modelId : underscore notation of the called
model
 *  without _service ending
 * @param string $wsdlMethod : method of the controller that will
generate the WSDL
 */
function handle($modelId, $wsdlMethod = 'wsdl')
{
$modelClass = $this-__getModelClass($modelId);
$wsdlCacheFile = CACHE . $modelClass . '.wsdl';

// Try to create cache file if not exists
if (! is_file($wsdlCacheFile)) {
$this-getWSDL($modelId);
}

if (is_file($wsdlCacheFile)) {
$server = new SoapServer($wsdlCacheFile);
} else {
$controllerName = $this-params['controller'];
$wsdlURL = Router::url(/$controllerName/$wsdlMethod,
true);
$server = new SoapServer($wsdlURL . '/' . $modelId);
}
//$server-setClass($modelClass.Controller);
$server-setClass($controllerName.'Controller');
$server-handle();
}

/**
 * Get model class for specified model id
 *
 * @access private
 * @return string : the model id
 */
function __getModelClass($modelId)
{
$inflector = new Inflector;
return ($inflector-camelize($modelId) . 'service');
}

function __getFullNameClass($modelId)
{
$inflector = new Inflector;
return ($inflector-camelize($modelId) .
'serviceController');
}


/**
 * Get model file for specified model id
 *
 * @access private
 * @return string : the filename
 */
function __getModelFile($modelId)
{
$modelDir = dirname(dirname(dirname(__FILE__))) . DS .
'controllers';
return $modelDir . DS . $modelId . '_controller.php';
}
}
?

app/controllers/service_controller.php
?php
class ServiceController extends AppController
{
public $name = 'Service';
public $uses = array();
public $helpers = array();
public $components = array('Soap');

public function call()
{
CakeLog::write(LOG_DEBUG,'Begin 

My Component try to use RequsetHandler component. Problem.

2008-03-26 Thread wDevil

class OrderComponent extends Object {
private $Orders;
private $OrderComponents;

private $RequestHandler;

function initialize() {
App::import('Model','Orders');
App::import('Model','OrderComponents');
$this-Orders= new Orders();
$this-OrderComponents= new OrderComponents();

App::import('Component','RequestHandler');
$this-requestHandler= new RequestHandler();
...
}
Error:
Fatal error: Class 'RequestHandler' not found in ...

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups Cake 
PHP group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~--~~~~--~~--~--~---



Re: My Component try to use RequsetHandler component. Problem.

2008-03-26 Thread wDevil

 If you are using it:

 class OrderComponent extends Object {
  var $components = array('RequestHandler');

 }
Thanks. :)

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups Cake 
PHP group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~--~~~~--~~--~--~---