Zend_Amf_Server Zend_Auth

Zend_Amf_Server performs authentication only if it receives AMF CREDENTIALS_HEADER.
So if my Flash app doesn't send the CREDENTIALS_HEADER it gets access to all server methods.
Authentication that can be turned off by the cliet, makes no sense to me.
Please explain why is it implemented this way

RemoteObject method setCredentials(username:String, password:String, charset:String = null):void

Similar Messages

  • Zend_Amf_Server authentication

    Zend_Amf_Server documentation clearly states that 'if the credentials are received in the AMF request headers'  Zend_Amf_Server can perform authentication.
    But how do I add credentials to AMF headers ???

    RemoteObject method setCredentials(username:String, password:String, charset:String = null):void

  • CS5 with PHP - Lesson 7, Zend_Auth

    Hi there.
    Wondering if anyone can help shed some light on an issue I'm having that is based around the Login Script/Authentication in Lesson 7 of David Powers Dreamweaver CS5 with PHP book.
    I've created a few simple CMS's with the help of the book and everything works fine.
    For my next CMS however I would like to add different levels of access.
    Currently I have 2 database tables - Admin and Client. I then created login scripts that go to different areas - Front end Client login, for example www.website.com/login.php when authenticated Client is taken to www.website.com/index.php. I then did the same thing but for an Admin - www.website.com/admin/login.php when authenticated Admin is taken to www.website.com/admin/index.php
    This all works really well - I've used $identity to show welcome messages and the currently logged in user e.t.c.
    The issue is that because both logins use very similar code there is no difference between an Admin and a Client. If a Client logs in to their account, they could then type in the admin URL and access all of the admin features.
    To rectify this, is it a simple case of changing the storage variable? Currently I have the code identical to the book - if authentication is passed then $storage is used with getResultRowObject.
    Is it a simple case of changing this (say for the admin script) to - $adminstorage = $auth->getStorage(); $adminstorage->write...........
    Or will this just result in the same?
    If anyone could point me in the right direction for setting up different levels of access using the Zend_Auth_Adapter_DbTable or whether I need to use something else it would be greatly appreciated.
    Thanks.

    Hi Osgood
    Thanks for taking the time to reply.
    I already have separate tables for Admin and Clients.
    I think the problem is they are both calling the same Authentication adapter. Zend_Auth_Adapter_DbTable.
    Ideally I need a kind of 'realm' which some of the other Auth Adapters have but I'm not sure how to use them.

  • Getting "Method 'sign_in' does not exist" Error (using Charles)

    This may be a bit off the FLEX field, and have to do with Zend Framework's ZEND_AMF class. Unfortunately I haven't been able to dig anything up, and comments posted on Wade Arnolds site have not received any responses, so I thought I'd give it a go here.
    My ServiceController Class:
    public function loginAction()
         $this->_helper->viewRenderer->setNoRender();
         $server = new Zend_Amf_Server();
         $server->setClass('LoginAmfService', 'LoginService');
         $server->setClassMap('CurrentUserVO', 'CurrentUserVO');
         $server->setProduction(false);
         print($server->handle());
    My LoginAmfService class:
    class LoginAmfService
          * Main login function.
          * @param  string        $name
          * @param  string        $password
          * @return CurrentUserVO
         public function sign_in($name, $password)
              $authAdapter     = new Zend_Auth_Adapter_DbTable(Zend_Registry::get('db'), 'users', 'user_name', 'password', 'PASSWORD(?) AND active = 1');
              $returnValue     = new CurrentUserVO();
              $authAdapter->setIdentity(htmlspecialchars($name))
                   ->setCredential(htmlspecialchars($password));
              $authResult = $authAdapter->authenticate();
              if ($authResult->isValid())
                   $userArray                          = $authAdapter->getResultRowObject(array('id', 'first_name', 'last_name', 'title', 'photo'));
                   $returnValue->first_name     = $userArray->first_name;
                   $returnValue->last_name          = $userArray->last_name;
                   $returnValue->title               = $userArray->title;
                   $returnValue->photo               = $userArray->photo;
                   $returnValue->token               = $userArray->id;
              return $returnValue;
          * Function used to log people off.
         public function sign_out()
              $authAdapter = Zend_Auth::getInstance();
              $authAdapter->clearIdentity();
    My SignIn FLEX module (the relevant portions):
         <mx:RemoteObject
              id="LoginRemote"
              destination="login"
              source="SignIn"
              showBusyCursor="true"
              fault="parentDocument.handleFault(event)"
         >
               <mx:method name="sign_in" result="signin_handle(event)" />
               <mx:method name="sign_out" result="signout_handle(event)" />
         </mx:RemoteObject>
         <mx:Script>
              <![CDATA[
                   import mx.rpc.events.FaultEvent;
                   import mx.utils.ArrayUtil;
                   import mx.rpc.events.ResultEvent;
                   import mx.controls.Alert;
                   import com.brassworks.ValueObjects.CurrentUserVO;
                   import mx.events.VideoEvent;
                   [Bindable]
                   private var this_user:CurrentUserVO = new CurrentUserVO();
                   private function mdl_init():void
                        focusManager.setFocus(txt_username);
                   private function signin_handle(event:ResultEvent):void
                             this_user = event.result as CurrentUserVO;
                             if (this_user.token == null) {Alert.show("Supplied login credentials are not valid. Please try again.");}
                             else
                                  this.parentApplication.setUser(this.this_user);
                   private function signout_handle(event:ResultEvent):void
                   private function sign_in(event:Event):void
                        try
                             //Alert.show(txt_name.text + "|" + txt_password.text);
                             LoginRemote.sign_in(txt_username.text, txt_password.text);
                        catch (error:Error)
                             this.parentDocument.handleFault(error);
                   private function sign_out(event:Event):void
                   private function show_error(error:Error, s_function:String):void
                        Alert.show("Method:" + s_function + "\nName: " + error.name + "\nID: " + error.errorID + "\nMessage: " + error.message + "\nStack Trace: " + error.getStackTrace() + "\nError: " + error.toString());
                   private function handleFault(event:FaultEvent):void
                        Alert.show(event.fault.faultDetail, event.fault.faultString);
              ]]>
         </mx:Script>
    Now, all this is great and good, as it works with Zend Framework 1.7.6. However, when I try to upgrade to 1.7.8 (to take advantage of session management and other bug-fixes), I get the following error (using Charles):
    #1 /var/web/htdocs/core/library/Zend/Amf/Server.php(390): Zend_Amf_Server->_handle(Object(Zend_Amf_Request_Http))
    #2 /var/web/htdocs/core/application/default/controllers/ServicesController.php(73): Zend_Amf_Server->handle()
    #3 /var/web/htdocs/core/library/Zend/Controller/Action.php(503): ServicesController->loginAction()
    #4 /var/web/htdocs/core/library/Zend/Controller/Dispatcher/Standard.php(285): Zend_Controller_Action->dispatch('loginAction')
    #5 /var/web/htdocs/core/library/Zend/Controller/Front.php(934): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
    #6 /var/web/htdocs/core/application/bootstrap.php(39): Zend_Controller_Front->dispatch()
    #7 /var/web/htdocs/core/public/index.php(5): Bootstrap->runApp()
    #8 {main} ?Method "sign_in" does not exist
    I have no idea why this would not work anymore. My assumption is that I am not correctly setting up Zend_Amf (but then again, my counter-argument is that it worked before, so ..... ????)
    Thanks for any help!
    -Mike

    For those that are also fighting this issue:
    The problem appears to be that the RemoteObject needs to specify the class containing the methods as a source parameter. According to this bug report (http://framework.zend.com/issues/browse/ZF-5168) it is supposed to have been addressed, but apparently has re-emerged in Zend_Amf since version 1.7.7.
    Using my example above, I would have to specify the RO as:
    <mx:RemoteObject
              id="LoginRemote"
              destination="login"
              source="LoginAmfService"
              showBusyCursor="true"
              fault="parentDocument.handleFault(event)"
         >
               <mx:method name="sign_in" result="signin_handle(event)" />
               <mx:method name="sign_out" result="signout_handle(event)" />
         </mx:RemoteObjecct>

  • Zend AMF Authentication & Authorization

    How do I secure my PHP services created with 'Connect To PHP' wizard?
    The web is full of tutorials on connecting to PHP but I found nothing on securing the services.
    The 'Connect to PHP' wizard generates a gateway.php which doesn't do authorization.
    Do I have to replace this endpoint with my own? Why doesn't Adobe have tutorials on this?
    maybe PHP apps are not meant to be safe?

    I've been struggling with it, and figured it all out - so, perhaps it could help others.
    The authentication is called on the server only if credentials supplied from the client (via the remote procedure call headers). This snippet illustrates the setup of custom auth (these are the last 6 lines of gateway.php script):
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // Handle request
    $auth = new My_Amf_Auth(); // authentication
    $server->setAuth($auth);
    $acl = new Zend_Acl(); // authorization
    $server->setAcl($acl);
    echo $server->handle();
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Now, your custom auth should extend Zend_Amf_Auth_Abstract. Since I want to authenticate users from a database, I bring the Zend_Auth_Adapter_DbTable to play. But since I cannot extend both Zend_Amf_Auth_Abstract and Zend_Auth_Adapter_DbTable, I use a composition:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    <?php
    require_once ('Zend/Amf/Auth/Abstract.php');
    * AMF auth class by Danko Kozar, dankokozar.com
    * @author dkozar
    class My_Amf_Auth extends Zend_Amf_Auth_Abstract {
        function __construct() {
        public function authenticate() {
            $adapter = My_Db_Adapter::getInstance();            
            $adapter->setIdentity($this->_username);
            $adapter->setCredential($this->_password);
            // the adapter call
            // you can wrap it into try.. catch and process DB connection errors
            $result = Zend_Auth::getInstance()->authenticate($adapter);
            return $result;
    ?>
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Here's the adapter class:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    <?php
    * DB table adapter auth class for AMF by Danko Kozar, dankokozar.com
    * @author dkozar
    * Singleton
    class My_Db_Adapter extends Zend_Auth_Adapter_DbTable {
        protected static $_instance = null;
         * private!
         * @param My_Db_Adapter $adapter
        public function __construct(Zend_Db_Adapter_Abstract $adapter = null) {
            if (!$adapter)
                $adapter = new Zend_Db_Adapter_Mysqli(
                    array(
                        'dbname' => 'test',
                        'username' => 'root',
                        'password' => '')
            parent::__construct($adapter);
            $this
                ->setTableName('users')
                ->setIdentityColumn('username')
                ->setCredentialColumn('password')
            // just for testing
    //        $this
    //            ->setIdentity('username')
    //            ->setCredential('password')
         * @return  My_Db_Adapter
        public static function getInstance()
            if (null === self::$_instance) {
                self::$_instance = new self();
            return self::$_instance;
        public function authenticate() {
            $_authResult = parent::authenticate();
            // NOTE: The point is that $result->_identity is an OBJECT (of type stdClass), NOT string
            // with Zend_Auth_Adapter_DbTable it is internally accomplished by calling its getResultRowObject() method
            // It constructs the stdClass with properties named after table attributes
    //        $user = new stdClass();
    //        $user->role = "administrator";
    //        $user->username = $_authResult->getIdentity();
            $identity = $this->getResultRowObject();
            $result = new Zend_Auth_Result($_authResult->getCode(), $identity);
            return $result;
    ?>
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    On the Flex side I have an auto-generated class (MyService) which extends another auto-generated class (_Super_MyService).
    The point is that the outer one is auto-generated only once (initially), and you can modify it, without worrying to be overwritten on service regeneration.
    There's a protected property _serviceControl (which is of type RemoteObject) which could be tweaked if needed.
    I'm tweaking it by of setting the endpoint (with string read from a client side config in preInitializeService() method). Plus, I'm adding 2 more methods, which expose setCredentials and setRemoteCredentials methods of _serviceControl, so I can acces it from my code.
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    package services.myservice
        public class MyService extends _Super_MyService
             * Override super.init() to provide any initialization customization if needed.
            protected override function preInitializeService():void
                super.preInitializeService();
                // Initialization customization goes here
                _serviceControl.endpoint = "http://localhost/myapp/gateway.php";
            public function setCredentials(username:String, password:String, charset:String=null):void
                _serviceControl.setCredentials(username, password, charset);
            public function setRemoteCredentials(username:String, password:String, charset:String=null):void
                _serviceControl.setRemoteCredentials(username, password, charset);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    So, before calling MyService methods, I'm setting the credentials with setCredentials() method and this runs the authentication on the PHP side:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    private var service:MyService;
    service = new MyService(); // ServiceLocator.getInstance().getHTTPService("presetLoader");
    service.setCredentials("user1", "pass1");
    var token:AsyncToken = service.getData();
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    The authentication via Zend_Amf_Server is, by the way, OPTIONAL! Meaning, with no credentials supplied, Zend_Amf_Server will NOT RUN IT. Thus you should rely on Zend_Acl (e.g. roles) to so your permissions and security! 
    Finally, here's the MySQL DB table I've been using for authentication: 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    -- Table structure for table `users`
    CREATE TABLE IF NOT EXISTS `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(50) NOT NULL,
      `password` varchar(32) DEFAULT NULL,
      `role` varchar(45) DEFAULT NULL,
      `firstname` varchar(50) DEFAULT NULL,
      `lastname` varchar(50) DEFAULT NULL,
      `email` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `username` (`username`),
      UNIQUE KEY `id_UNIQUE` (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; 
    -- Dumping data for table `users`
    INSERT INTO `users` (`id`, `username`, `password`, `role`, `firstname`, `lastname`, `email`) VALUES
    (1, 'user1', 'pass1', 'administrator', 'Danko', 'Kozar', NULL); 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Cheers!
    Danko

  • Unable to connect to the server to pull data from mysql

    Hello,
    I am novice working with Flash Builder 4 and I just created a test application which runs well in my computer pulling data from Mysql using PHP and populating a datagrid. But when I transfered it to the my hosting provider failed. I have been doing some modifications to the gateway.php and amf.config.ini to solve some of the issues. Now the application try to run but doesn't populate the data in the datagrid. I included a tracking point in my data service file to read the connections variables, but they come up in blank. I highly appreciate any help. Here are my gateway.php, amf.config.ini and the data service.
    gateway.php
    <?php
    ini_set("display_errors", 1);
    $dir = dirname(__FILE__);
    $webroot = $_SERVER['DOCUMENT_ROOT'];
    $configfile = "$dir/amf_config.ini";
    $fp = fopen("tracking.txt", "a");
    fwrite($fp, "1-config file " . $configfile . "\r\n");
    //default zend install directory
    $zenddir = $webroot. '/ZendFramework/library';
    //-$zenddir = $webroot;
    fwrite($fp, "2-default zendir" . $zenddir . "\r\n");
    //Load ini file and locate zend directory
    if(file_exists($configfile)) {
         $arr=parse_ini_file($configfile,true);
         if(isset($arr['zend']['webroot'])){
              $webroot = $arr['zend']['webroot'];
              $zenddir = $webroot. '/ZendFramework/library';
         if(isset($arr['zend']['zend_path'])){
              $zenddir = $arr['zend']['zend_path'];
    fwrite($fp, "3-after zendir" . $zenddir . "\r\n");
    // Setup include path
    //add zend directory to include path
    set_include_path(get_include_path().PATH_SEPARATOR.$zenddir);
    // Initialize Zend Framework loader
    require_once 'Zend/Loader/Autoloader.php';
    //-require_once 'Autoloader.php';
    Zend_Loader_Autoloader::getInstance();
    // Load configuration
    $default_config = new Zend_Config(array("production" => false), true);
    $default_config->merge(new Zend_Config_Ini($configfile, 'zendamf'));
    $default_config->setReadOnly();
    $amf = $default_config->amf;
    fwrite($fp, "4- configfile" . $dafault_config["production"] . "\r\n");
    // Store configuration in the registry
    Zend_Registry::set("amf-config", $amf);
    // Initialize AMF Server
    $server = new Zend_Amf_Server();
    $server->setProduction($amf->production);
    if(isset($amf->directories)) {
         $dirs = $amf->directories->toArray();
         foreach($dirs as $dir) {
             // get the first character of the path.
             // If it does not start with slash then it implies that the path is relative to webroot. Else it will be treated as absolute path
             $length = strlen($dir);
             $firstChar = $dir;
             if($length >= 1)
                  $firstChar = $dir[0];
             if($firstChar != "/"){
                  // if the directory is ./ path then we add the webroot only.
                  if($dir == "./"){                  
                       $server->addDirectory($webroot);
                  }else{
                       $tempPath = $webroot . "/" . $dir;
                        $server->addDirectory($tempPath);
              }else{
                      $server->addDirectory($dir);             
    fwrite($fp, "5-temp path" . $tempPath . "=>" . "\r\n");
    fwrite($fp, "******************************************" . "\r\n");
    // Initialize introspector for non-production
    if(!$amf->production) {
         $server->setClass('Zend_Amf_Adobe_Introspector', '', array("config" => $default_config, "server" => $server));
            $server->setClass('Zend_Amf_Adobe_DbInspector', '', array("config" => $default_config, "server" => $server));
    // Handle request
    echo $server->handle();
    ?>
    amf.config.ini
    [zend]
    ;set the absolute location path of webroot directory, example:
    ;Windows: C:\apache\www
    ;MAC/UNIX: /user/apache/www
    ;-webroot =c:/wamp/www/
    webroot = /home/frutiexp/public_html
    ;set the absolute location path of zend installation directory, example:
    ;Windows: C:\apache\PHPFrameworks\ZendFramework
    ;MAC/UNIX: /user/apache/PHPFrameworks/ZendFramework
    ;zend_path = /home/frutiexp/public_html/ZendFramework
    [zendamf]
    amf.production = true
    amf.directories[]=fb41/services
    ;amf.directories[]=./
    CoursesService.php
    <?php
    *  README for sample service
    *  This generated sample service contains functions that illustrate typical service operations.
    *  Use these functions as a starting point for creating your own service implementation. Modify the
    *  function signatures, references to the database, and implementation according to your needs.
    *  Delete the functions that you do not use.
    *  Save your changes and return to Flash Builder. In Flash Builder Data/Services View, refresh
    *  the service. Then drag service operations onto user interface components in Design View. For
    *  example, drag the getAllItems() operation onto a DataGrid.
    *  This code is for prototyping only.
    *  Authenticate the user prior to allowing them to call these methods. You can find more
    *  information at <link>
    class CoursesService {
         var $username = "myusername";
         var $password = "mypassword"
         var $server = "localhost";
         var $port = "3306";
         var $databasename = "frutiexp_trainsur";
         var $tablename = "courses";
         var $connection;
          * The constructor initializes the connection to database. Everytime a request is
          * received by Zend AMF, an instance of the service class is created and then the
          * requested method is invoked.
         public function __construct() {
                $this->connection = mysqli_connect(
                                              $this->server, 
                                              $this->username, 
                                              $this->password,
                                              $this->databasename,
                                              $this->port
    $fp = fopen("./tracking.txt", "a");
    fwrite($fp, "1-service".  $databasename . " " . $username . "\r\n");
    fclose($fp);
              $this->throwExceptionOnError($this->connection);
          * Returns all the rows from the table.
          * Add authroization or any logical checks for secure access to your data
          * @return array
         public function getAllCourses() {
              $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename");         
              $this->throwExceptionOnError();
              mysqli_stmt_execute($stmt);
              $this->throwExceptionOnError();
              $rows = array();
              mysqli_stmt_bind_result($stmt, $row->cou_id, $row->cou_title, $row->cou_overview, $row->cou_objectives);
             while (mysqli_stmt_fetch($stmt)) {
               $rows[] = $row;
               $row = new stdClass();
               mysqli_stmt_bind_result($stmt, $row->cou_id, $row->cou_title, $row->cou_overview, $row->cou_objectives);
              mysqli_stmt_free_result($stmt);
             mysqli_close($this->connection);
             return $rows;
          * Returns the item corresponding to the value specified for the primary key.
          * Add authroization or any logical checks for secure access to your data
          * @return stdClass

    Hello Jdesko,
    Thank you for you prompt response. Yes, I have changed the connections variables in my dataservice ( I didn't post real values). You are right, after all I didn't make changes on the gateway.php except to add some tracking points. The one that I changed is the amf.config,ini. The application runs without any error exceptions, but don't populate the datagrid. According with the tracing is stoping just when establishing the connection to the database. Please let me know if you have any other clue. thanks

  • Problems on Windows 7 Professional 64 with PHP data service

    I've created a data service using PHP in a PHP Eclipse project and I'm trying to connect to it from my new Flash project. When I try to create a custom data type via the Configure Return Type dialog, "Auto detect the return type from sample data" radio button, I get the following error:
    There was an error while invoking the operation. Check  your operation inputs or server code and try invoking the operation again. 
    Reason:
    Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2003): Can't connect to MySQL  server on 'localhost' (10061) in  C:\Users\davidk\workspace\php-global-includes\mysqlAccess.inc.php on line  11
        /0/onStatusÿÿÿÿ �SIflex.messaging.messages.ErrorMessage extendedData faultCode faultDetail faultString rootCause correlationId clientId destination messageId timestamp timeToLive headers  body  „m …a#0  C:\Zend\ZendServer\share\ZendFramework\library\Zend\Amf\Server.php(550):  Zend_Amf_Server->_dispatch('getProductVersi...', Array, 'GetPlayData')#1  C:\Zend\ZendServer\share\ZendFramework\library\Zend\Amf\Server.php(626):  Zend_Amf_Server->_handle(Object(Zend_Amf_Request_Http))#2  C:\Zend\Apache2\htdocs\play-debug\gateway.php(69):  Zend_Amf_Server->handle()#3 {main} ‚UError instantiating class GetPlayData to  invoke method getProductVersions: Error connecting to database server as user  via password configured in  config_cdna_testdb.php  IE83D9958-920E-E203-54BC-E5365BD85289 I5496259E-8C36-AC89-E234-00000D37FD49  I7E8A1BD7-9D60-9329-DBFB-00001B5BE8C7  126823334100     
    Note that I've tested the GetPlayData class and the getProductVersions() method with some simple "unit testing" code and it works fine when I execute it directly. It just won't run when called from this dialog.
    I tried to debug the gateway.php process that is used to do this connecting without much success so far.
    Is Windows 7 supported for PHP data service development in this beta release? I'm using Version 4.0 build 253292

    One more clue: the message from the exception shows that the global variables I'm using to configure the MySQL connection parameters are not set somehow. Maybe I need to upgrade my Zend Framework?
    Nope. I upgraded to the latest Zend Framework and it still did not work. The global variables are not working. When I hard coded the connection parameters into the constructor of the GetPlayData class, then it worked fine. I just switched to using define() to create constants instead of using the globals and that worked, too.
    It is as if globals set in one include file are not available in another include file. I agree that using them might be a bad programming practice of sorts, but it seems wrong to disallow / not support something that is part of the core language!
    So, I don't know if this is a Windows 7 thing or just a general behavior. Globals within the same file seem to work fine still, but not from another include file.
    So the answer for me is to not use these cross-include file globals in code that is going to be used from Flash Builder.

  • Flex and Zend amf deployment resolved with proper solution

    Hi All,
    Although, I personally do not like using Zend for these issues itself. However, I faced this issue first time with flex 4.0 version when everyone used to run into
    channel disconnected error. you can find the link for that post here:
    http://forums.adobe.com/message/3366991.
    Now, with flash builder 4.6, things have changed slightly and so the deployment process. So, here are the right set of steps to be followed :
    1. after developing your flash project, export the release build(I assume if you are a flex user, you should know these steps already)
    2. Now, check your release folder, you must have got some files with amfconfig.ini and gateway.php and just one folder named history.
    3. copy all these files into a new folder say "My Release Build".
    4. Now, step 1 is get Zend framework in place, to achieve that:
    there are different ways. some will say : "make sure zend must already installed on your production server." that is an alternative but most likely,  the easier way to do this is : search your www(root folder on localhost),you will find a folder with name ZendFramework. Copy this folder to "My Release Build"
    5. Now, the services that you have used in your flex project, go to debug folder of your project which should be in your www(root folder on localhost) with name "yourprojectname-debug". copy services folder from this debug folder to "My Release Build"
    6. Now, open your amfconfig.ini from "My Release Build" and edit and make it look like following:
    [zend]
    webroot = http://www.yourwebsite.com
    ;you can edit above webroot to match the root folder of your website or use . to make it point to root.
    zend_path = ./ZendFramework/library
    [zendamf]
    amf.production = true
    amf.directories[]= services
    thats it. your amf config is fine.
    7. edit gateway.php:
    Now, remove everything from gateway.php and copy this as it is there:
    <?php
    ini_set("display_errors", 1);
    $dir = '.';
    $webroot = $_SERVER['DOCUMENT_ROOT'];
    $configfile = "amf_config.ini";
    //default zend install directory
    $zenddir = $webroot. '/ZendFramework/library';
    //Load ini file and locate zend directory
    if(file_exists($configfile)) {
        $arr=parse_ini_file($configfile,true);
        if(isset($arr['zend']['webroot'])){
            $webroot = $arr['zend']['webroot'];
            $zenddir = $webroot. '/ZendFramework/library';
        if(isset($arr['zend']['zend_path'])){
            $zenddir = $arr['zend']['zend_path'];
    // Setup include path
        //add zend directory to include path
    set_include_path(get_include_path().PATH_SEPARATOR.$zenddir);
    // Initialize Zend Framework loader
    require_once 'Zend/Loader/Autoloader.php';
    Zend_Loader_Autoloader::getInstance();
    // Load configuration
    $default_config = new Zend_Config(array("production" => false), true);
    $default_config->merge(new Zend_Config_Ini($configfile, 'zendamf'));
    $default_config->setReadOnly();
    $amf = $default_config->amf;
    // Store configuration in the registry
    Zend_Registry::set("amf-config", $amf);
    // Initialize AMF Server
    $server = new Zend_Amf_Server();
    $server->setProduction($amf->production);
    if(isset($amf->directories)) {
        $dirs = $amf->directories->toArray();
        foreach($dirs as $dir) {
            // get the first character of the path.
            // If it does not start with slash then it implies that the path is relative to webroot. Else it will be treated as absolute path
            $length = strlen($dir);
            $firstChar = $dir;
            if($length >= 1)
                $firstChar = $dir[0];
            if($firstChar != "/"){
                // if the directory is ./ path then we add the webroot only.
                if($dir == "./"){               
                    $server->addDirectory($webroot);
                }else{
                    $tempPath = $webroot . "/" . $dir;
                    $server->addDirectory($tempPath);
            }else{
                   $server->addDirectory($dir);           
    // Initialize introspector for non-production
    if(!$amf->production) {
        $server->setClass('Zend_Amf_Adobe_Introspector', '', array("config" => $default_config, "server" => $server));
        $server->setClass('Zend_Amf_Adobe_DbInspector', '', array("config" => $default_config, "server" => $server));
    // Handle request
    echo $server->handle();
    Now, upload your "My Release Build folder to your production server webroot"
    case 1: if you get "channel disconnected error, you have made some mistake and your path for zend or services folder is not right."
    In above case, "ZendFramework folder and services folder with all of other release files". To find out what is wrong, open this url :
    http://www.yourwebsite.com/gateway.php. if you see this lovely string there : "Zend Amf Endpoint". consider your are through with zend settings on server
    otherwse you will see relative errors.
    2. After fixing this step, try run your website, you will land into this error :
    Class “yourcorrectclassname” does not exist: Plugin by name ‘Classname’ was not found in the registry; used paths:
    : /home1/messoftc/public_html/oc/services/
    #0 /home1/messoftc/public_html/ZendFramework/library/Zend/Amf/Server.php(553): Zend_Amf_Server->_dispatch(‘fxnname’, Array, ‘classname’)
    #1 /home1/messoftc/public_html/ZendFramework/library/Zend/Amf/Server.php(629): Zend_Amf_Server->_handle(Object(Zend_Amf_Request_Http))
    #2 /home1/messoftc/public_html/oc/gateway.php(69): Zend_Amf_Server->handle()
    #3 {main}
    Now, this is a zend framework bug, it does not automatically detect the php classes in your services folder,those who have run into this, must have googled hard to find the solution and this bug is also logged officially on zend server jira log.
    so, what is the solution? simple and effective. open your gateway.php file from "My Release Build"
    Add this little line :
    $server->addDirectory(dirname(__FILE__) . '/services/');
    after this line :
    $server->setProduction($amf->production);
    reupload this file to your production, you should see your Flex, Zend, php & Mysql in action.
    Here is a sample link I have created :
    http://www.eiws.co.in/testzend.html
    you may also visit the endpoint file:
    http://eiws.co.in/gateway.php
    If anyone still faces this issue, can contact me at [email protected].
    Credits: "To all developers who share their knowledge with everyone and google and thousands of blogs who provide a medium to share this knowledge"

    Richard Bates of flexandair.com figured it out. In my php.ini file, I had the memory limit set at 8M. After, changing it to 32M, it worked. Thank you, Richard!
    -Laxmidi

  • Flex App with remoting works on local Apache server - fails on production server

    Hi Everyone,
    I have a Flex app that uses Data Services. The application works correctly on my local Mac Server and Apache. When uploaded to my production CentOS server, the Data Services fail. When the app is done loading, the following error message comes up:
    Class "ModelsService" does not exist: Plugin by name 'ModelsService' was not found in the registry; used paths:
    : /www/html/mdubb//PHP2/bin-debug/services/
    #0 /var/www/html/mdubb/ZendFramework/library/Zend/Amf/Server.php(550): Zend_Amf_Server->_dispatch('getAllModels', Array, 'ModelsService')
    #1 /var/www/html/mdubb/ZendFramework/library/Zend/Amf/Server.php(626): Zend_Amf_Server->_handle(Object(Zend_Amf_Request_Http))
    #2 /var/www/html/mdubb/PHP2/bin-debug/gateway.php(73): Zend_Amf_Server->handle()
    #3 {main}
    Where getAllModels is a method of my custom ModelsService.
    I changed the Zend path in the amf_config.ini file so it references the correct directory. If I browse to gateway.php, it prompts to download the file, which I think is correct.
    I added in the config file the path to the services folder.
    I tried adding $server->addClass("ModelServices") in gateway.php, but it didn't like that.
    The file structure on the production server is the same as the local server (I litterally uploaded everything in my local web root), so I can't think of what would be differenet between the two.
    I have already pulled one all nighter trying to get this to run. Do you know what I should troubleshoot next?
    Thanks in advance,
    Ryan

    Hi,
    With reference to Lumira 1.15, the minimal SP we support is BI 4.0 SP6. Please upgrade at least to this. Everything is detailed in the PAM https://websmp107.sap-ag.de/~sapidb/011000358700001095842012E
    Best regards,
    Antoine

  • Problem in mapping remoteobject on server side

    Hello all
    I am trying to use remoteobjects in Flex and PHP via Zend_AMF.  I am having problem in mapping the data object in flex with the one in PHP.
    Here's my code....
    private function getAuthors(event:Event):void
         serviceRO = new RemoteObject();
         serviceRO.endpoint = "http://localhost/sampleproj/public/";
         serviceRO.destination = "zend";
         serviceRO.source = "MyService";
         serviceRO.addEventListener(FaultEvent.FAULT, faultListener);
         serviceRO.getData.addEventListener(ResultEvent.RESULT, resultListener);
    Now, here's the server side directory structure that works for me....
    webroot
    + sampleproj
    ++ public
    +++ index.php (index file for the webapp)
    +++ MyService.php (this is the service class)
    +++ VOAuthor.php (this is the Value Object class)
    Since the index file, and the service file and value object are all in same directory, it works.
    This is what DOESN'T work....
    webroot
    + sampleproj
    ++ services
    +++ MyService.php (this is the service class)
    ++ vos
    +++ VOAuthor.php (this is the Value Object class)
    ++ public
    +++ index.php (index file for the webapp)
    The error that I get is:
    Channel.Connect.Failed error
    Here's little of something that's going on in index.php
    <?php
    require_once ('C:/webtools/zendframework/zf/library/Zend/Amf/Server.php');
    require_once ( realpath(dirname(__FILE__) . '/../services/MyService.php') );
    $server = new Zend_Amf_Server();
    $server->setClass("MyService"); // adding the class to AMF server
    $server->setClassMap("VOAuthor", "VOAuthor"); // mapping the ActionScript VO to PHP VO
    echo($server->handle());
    ?>
    My guess is that in ActionScript code I have to do something with RemoteObject's endpoint.
    Can anybody please help me out with this?
    Thanks and Regards
    ShiVik

    The problem turned out to be in the php code.
    Here's how I changed it
    <?php
    require_once ('C:/webtools/zendframework/zf/library/Zend/Amf/Server.php');
    $server = new Zend_Amf_Server();
    // the following methods provide the lazy loading of services and value objects
    $server->addDirectory( realpath(dirname(__FILE__) . "/../services/") );
    $server->addDirectory( realpath(dirname(__FILE__) . "/../vos/") );
    echo($server->handle());
    ?>
    Earlier I wasn't taking into account the change of directories for service and value object files.
    Thanks and Regards
    ShiVik

  • Problem in mapping -Guided procedures

    Hi All,
          I have a interactive form parameter called Price of type decimal in Guided procedure, and i have a BAPI parameter StdPrice of type decimal. when i tried to group these two parameters the "Group" button gets disabled. When i  tried by checking Ignore types i was able to group the parameters but once i save the action and look back its ungrouped again.
    Is there any difference between the BAPI decimal parameter and Adobe interactive form decimal parameter?
    Note : EP Version 7.0 and SP13, Adobe Live Cycle Designer 7.1
    With Regards,
    Gopal.

    The problem turned out to be in the php code.
    Here's how I changed it
    <?php
    require_once ('C:/webtools/zendframework/zf/library/Zend/Amf/Server.php');
    $server = new Zend_Amf_Server();
    // the following methods provide the lazy loading of services and value objects
    $server->addDirectory( realpath(dirname(__FILE__) . "/../services/") );
    $server->addDirectory( realpath(dirname(__FILE__) . "/../vos/") );
    echo($server->handle());
    ?>
    Earlier I wasn't taking into account the change of directories for service and value object files.
    Thanks and Regards
    ShiVik

  • Flash Builder 4 - RemoteObjects

    I'm having an issue with remoteobjects in flash builder 4. I built a simple little project to see if I could get remoteobjects working.
    I got the project working and the output folder resides on a web server on my local LAN (not the machine with flash builder installed).
    Here is the issue I am having...
    When I build the app from from flash builder 4 the project launches everything works fine. If I open the URL of the project on the web server from my machine with flash builder 4 on it the project works fine. If I open the URL from any other machine the calls to the remoteobject do not work. I've scoured the web and haven't seen anyone else run into this issue so I'm assuming its something I'm doing wrong.
    I am on a trial version of flash builder 4. I just wanted to mention that but I don't see how that could be the issue.
    I've tried both methods of defining the remoteobject endpoint (both at runtime as one of the MXML remoteobject properties, and via a services-config.xml using the compiler argument -services PathToConfigFile). In each case the project runs and works fine from the machine with flash builder 4 installed on it but just not any other machine. I've also tried defining the -context-root thinking that may have been the issue still no dice.
    Any help would be greatly apprecaited.
    I'm not sure how useful the code would be as the project does work but here it is in any event...
    APPLICATION FILE:
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="
    library://ns.adobe.com/flex/spark" xmlns:mx="
    library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
    <s:RemoteObject id="testRO"source="
    TestRO"destination="
    TestRO"endpoint="
    endPoint.php"showBusyCursor="
    true">
    <s:method name="say" result="say_resultHandler(event)"/>
    </s:RemoteObject>
    </fx:Declarations>
    <fx:Script>
    <![CDATA[
    import mx.controls.Alert; 
    import mx.rpc.events.ResultEvent; 
    protected function say_resultHandler(event:ResultEvent):void
    Alert.show(String(event.result));
    ]]>
    </fx:Script>
    <s:TextInput x="73" y="73" id="repeatEntry"/>
    <s:Button x="209" y="73" label="Say" click="testRO.say(repeatEntry.text)"/>
    </s:Application>
    PHP ENDPOINT:
    <?php
    //Define error reporting for this application.
    error_reporting(E_ALL|E_STRICT);
    //Set the display_errors in the php.ini
    ini_set("display_errors","on");
    //Path to the Zend server.php file.
    require_once 'Zend/Amf/Server.php';
    //require your php class file ('DIRECTORY/CLASS.PHP').
    require_once 'TestRO.php';
    $server = new Zend_Amf_Server();
    //Class name for the server (Same as the php file name).
    $server->setClass("TestRO");
    //Handle request
    echo ($server->handle());
    ?>
    PHP CLASS FILE:
    <?php
    class TestRO
        public function say($text)
           if($text =="")
       return "+++ Field left blank +++";
        } else {
          return "+++ ".$text." +++";

    I've resolved the issue sort of...
    I exported a release build then re-tested the application and it works fine. For some reason while the application is in debug mode the remoteobject method calls aren't working on any other machines on the network... I still have no idea why... is this a new feature to prevent folks from using the debug swf's in production?
    In flex 3 I'd give the PROJECT-debug URL to my manager so he could track my progress but I was using the httpservice class and it worked without issue. In any event if someone knows the answer or has any additional information it would be greatly appreciated.
    Thank-you.

  • Zend + FB + MySQL problem

    Hi all,
    I am trying to teach myself the Zend connection to my database with a simple FB4 example, but I can't get it to work at all. It may be something simple, but I can't for the life of me, see it.
    This is my MXML code:
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                      xmlns:s="library://ns.adobe.com/flex/spark"
                      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
         <fx:Declarations>
              <!-- Place non-visual elements (e.g., services, value objects) here -->
              <s:ChannelSet id="zend_amf_channel_set">
                   <s:channels>
                        <s:AMFChannel uri="http://www.localhost/gateway.php"/>
                   </s:channels>
              </s:ChannelSet>
              <s:RemoteObject id="family_VO" destination="zend-amf" source="family"
                                  channelSet="{zend_amf_channel_set}"
                                  showBusyCursor="true"
                                  fault="membersError(event)">
                   <s:method name="getAllMembers" result="getAllMembersResult(event)"/>
              </s:RemoteObject>
         </fx:Declarations>
         <fx:Script>
              <![CDATA[
                   import mx.controls.Alert;
                   import mx.events.FlexEvent;
                   import mx.rpc.events.FaultEvent;
                   import mx.rpc.events.ResultEvent;
                   //private const GATEWAY_URL:String = "c:\wamp\www\WilliamsFamily\gateway.php";
                   private var memberData:MemberData;
                   [Bindable]
                   private var lang_title:String = "My Attempt To Figure This Stuff Out!";
                   protected function getAllMembers():void
                        family_VO.getAllMembers;
                   protected function clearDataGrid():void
                        member_dg.dataProvider = {};     
                   protected function getAllMembersResult(e:ResultEvent):void
                        member_dg.dataProvider = e.result;
                   protected function membersError(e:FaultEvent):void
                        Alert.show(e.toString());
              ]]>
         </fx:Script>
         <s:VGroup   width="100%" horizontalAlign="center" paddingTop="25">
              <s:Label text ="{lang_title}" fontSize="20"/>
              <mx:DataGrid id="member_dg" height="100">
                   <mx:columns>
                        <mx:DataGridColumn headerText="ID" dataField="id" width="100"/>
                        <mx:DataGridColumn headerText="First Name" dataField="fname"/>
                        <mx:DataGridColumn headerText="Last Name" dataField="lname"/>
                        <mx:DataGridColumn headerText="Age" dataField="age"/>
                        <mx:DataGridColumn headerText="Gender" dataField="gender" width="200"/>
                   </mx:columns>
              </mx:DataGrid>
              <s:HGroup>
                   <s:Button label="Get Family Members" click="{getAllMembers();}"/>
                   <s:Button label="Clear" click="{clearDataGrid();}"/>
              </s:HGroup>
         </s:VGroup>
    </s:Application>
    The family.php
    <?php
    require_once 'MemberData.php';
    class Family
         public function __construct()
              mysql_connect("localhost", "root", "root");
              mysql_select_db("williamsfamily");
         public function getAllMembers()
              //Array of family members
              $members = array();
              //Select all fields from db table
              $result = mysql_query("SELECT * FROM family");
              //if successfuly, go through results
              while ($row = mysql_fetch_assoc($result))
                   //create family member value object and populate with values
                   $member = new MemberData();
                   $member->id = $row["id"];
                   $member->fname = $row["fname"];
                   $member->lname = $row["lname"];
                   $member->age = $row["age"];
                   $member->gender = $row["gender"];
                   array_push($members, $member);
         //return the array of family members to flex
         return $members;
    ?>
    MemberData.php
    <?php
    class MemberData
         public $id;
         public $fname;
         public $lname;
         public $age;
         public $gender;
    ?>
    gateway.php
    <?php
    $debug = true;
    if ($debug)
         error_reporting(E_ALL|E_STRICT);
         ini_set("display_errors", "on");
    else
         ini_set("display_errors", "off");
    require_once "Zend/Amf/Server.php";
    $server = new Zend_Amf_Server();
    require_once "family.php";
    $server->setClass("Family");
    $server->setClassMap("MemberData", "MemberData");
    echo($server->handle());
    ?>
    I was following a tutorial I found that seemed to explain the Zend+WAMP setup fairly well. I changed the php.ini include path to point to teh Zend/Library.
    It seems like I am not connecting to the database at all. Anyone see problems with the code?
    Thanks a million for the help!!

    Solved my own issue. The PDO wrapper is case sensitive when it comes to dealing with Oracle. Thus:
    class Equipment extends Zend_Db_Table
    protected $_name = 'EQUIPMENT;
    protected $_primary = 'ID';
    protected $_schema = 'ZZ';
    protected $_sequence = true;
    Nevertheless, I woul recommend staying away from the PDO wrapper and use standard oci functions.

  • AMF connection working on browser, not in stand alone player

    Greetings,
    I'm trying to communicate my SWF file with PHP using Zend_Amf. I compile the flash side using Flex SDK 4.
    Whenever I try to run the swf using the stand alone player (the projector), I always get a NetConnection.Call.BadVersion event. However, when running exactly the same file thorught the player of the browser (even not thoguht a server, just using the file:// kind of address), everything works OK, so I know my code is not completely wrong.
    I thought this could be related with the security sandbox. However, I added the folder where my swf file is to the global trusted folder; and actually made sure that Security.sandboxType returns "localTrusted". How ever, that didn't fix anything.
    So I'm out of ideas. Any suggestion on where to look next?

    Here's my code, in case its needed (it's a pretty straightforward hello world example):
    PHP SIDE:
    $a = new Amf_Model_Test();
    $server = new Zend_Amf_Server();
    $server->setClass('Amf_Model_Test');
    echo $server->handle();
    class Amf_Model_Test
    * return string               
    public function greet()
        return "hello";
    AS SIDE:
    public class main extends Sprite
    private var _resp: Responder;
    private var _nc: NetConnection;
    private var tf: TextField;
    private var _gateway: String;
    public function main()
    tf = new TextField();
    tf.width = 500;
    tf.border = true;
    tf.borderColor = 0x0000FF;
    addChild(tf);
          _gateway = 'http://cms.loc/amf';
    _resp = new Responder(onResult, onFault);
    _nc = new NetConnection();
    _nc.connect(_gateway);
    _nc.client = this;
    _nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
    _nc.call("Amf_Model_Test.greet", _resp);
    private function onNetStatus(event: NetStatusEvent): void
    trace(event.info['code']);
    tf.text = "Status = "+event.info['code'];
    private function onFault(result: Object): void
    tf.text = "Fault = " + String(result);
    private function onResult(result: Object): void
          tf.text = "Result = " + String(result);
    In my browser, I get "Result = hello", as expected. In the stand alone player (which is exactly the same version) I get "Status = NetConnection.Call.BadVersion".

  • Flex/Zend channel connect failed error...

    Hi guys.
        I am using Flex and php to develop my project. Everything works great in my local machine. However, when I upload my files to my server (godaddy.com). I got the error when loading my flex application.
    The pop-up error message is
    send failed
    channel.connect.failed.error
    Netconnection.call.Badversion: url:
    http://mydomail/folder/gateway.php
    I have upload my ZendFramewrok folder into my server and amf_config.ini has been configured. (webroot =http://mydomain)
    I am not sure what's going on here. Please help. Thanks.
    Update: my gateway.php
    <?php
    ini_set("display_errors", 1);
    $dir = dirname(__FILE__);
    $webroot = $_SERVER['DOCUMENT_ROOT'];
    $configfile = "$dir/amf_config.ini";
    //default zend install directory
    $zenddir = $webroot. '/ZendFramework/library'; //I did upload the ZendFramwork folder
    //Load ini file and locate zend directory
    if(file_exists($configfile)) {
    $arr=parse_ini_file($configfile,true);
    if(isset($arr['zend']['webroot'])){
      $webroot = $arr['zend']['webroot'];
      $zenddir = $webroot. '/ZendFramework/library';
    if(isset($arr['zend']['zend_path'])){
      $zenddir = $arr['zend']['zend_path'];
    // Setup include path
    //add zend directory to include path
    set_include_path(get_include_path().PATH_SEPARATOR.$zenddir);
    // Initialize Zend Framework loader
    require_once 'Zend/Loader/Autoloader.php';
    Zend_Loader_Autoloader::getInstance();
    // Load configuration
    $default_config = new Zend_Config(array("production" => false), true);
    $default_config->merge(new Zend_Config_Ini($configfile, 'zendamf'));
    $default_config->setReadOnly();
    $amf = $default_config->amf;
    // Store configuration in the registry
    Zend_Registry::set("amf-config", $amf);
    // Initialize AMF Server
    $server = new Zend_Amf_Server();
    $server->setProduction($amf->production);
    if(isset($amf->directories)) {
    $dirs = $amf->directories->toArray();
    foreach($dirs as $dir) {
         // get the first character of the path.
         // If it does not start with slash then it implies that the path is relative to webroot. Else it will be treated as absolute path
         $length = strlen($dir);
         $firstChar = $dir;
         if($length >= 1)
          $firstChar = $dir[0];
         if($firstChar != "/"){
          // if the directory is ./ path then we add the webroot only.
          if($dir == "./"){      
           $server->addDirectory($webroot);
          }else{
           $tempPath = $webroot . "/" . $dir;
        $server->addDirectory($tempPath);
      }else{
          $server->addDirectory($dir);     
    // Initialize introspector for non-production
    if(!$amf->production) {
    $server->setClass('Zend_Amf_Adobe_Introspector', '', array("config" => $default_config, "server" => $server));
    $server->setClass('Zend_Amf_Adobe_DbInspector', '', array("config" => $default_config, "server" => $server));
    // Handle request
    echo $server->handle();
    Error from gateway.php if I call it directly.
    Warning: require_once(Zend/Loader/Autoloader.php) [function.require-once]: failed to open stream: No such file or directory in /home/content/79/4687979/html/parkerList/gateway.php on line 27
    Fatal error: require_once() [function.require]: Failed opening required 'Zend/Loader/Autoloader.php' (include_path='.:/usr/local/php5/lib/php:http://blackwheels.info//ZendFramework/library') in /home/content/79/4687979/html/parkerList/gateway.php on line 27
    gateway.php is the rat. but I still can't figure out what's wrong. Zend/Loader/Autoloader.php is under the server root "ZendFramework/library" folder. I don't understand why my application can't find it. Thanks again!

    You will get a better response if you repost your question on the Flex forums. This forum is for the Livecycle Data Services product.

Maybe you are looking for