RE: RE: Returned object null;

"Davies, Grant M." <[email protected]>
Newsgroups gmane.comp.java.openamf.user
Message-ID <BEF55D977D60F94B9768E5C2AA39854613554BBC@gaatlitexch09s.nscorp.ad.nscorp.com>
Check the object is mapped correctly in the open-amf.xml

 

e.g

 

<custom-class-mapping>

 
<java-class>com.nscorp.security.authenticationService.util.AuthenticationRes
ponse</java-class>

 
<custom-class>com.nscorp.util.vo.AuthenticationResponse</custom-class>

</custom-class-mapping>

 

And that you registered your class in actionscript  e.g

 

Object.registerClass("com.nscorp.util.vo.AuthenticationResponse",
"com.nscorp.util.vo.AuthenticationResponse");

 

Turn on logging for the openAMF war file, you can see in the log if your
class is being created .

 

Grant

 

 

 

  _____  

From: [email protected]
[mailto:[email protected]] On Behalf Of Reza Heidari
Sent: Friday, August 19, 2005 10:44 AM
To: [email protected]
Subject: [Openamf-user] RE: Returned object null;

 

This may or may not be the fix, but it looks like you're forgetting to set
the force-lower-case-keys to false in your openamf-config.xml

<amf-serializer>

        <force-lower-case-keys>false</force-lower-case-keys>

</amf-serializer>

Hope this helps,

Reza

 

-----Original Message-----

 From: openamf-user-admin@li...

 [mailto:openamf-user-admin@li <mailto:openamf-user-admin@li> ...] On Behalf
Of jake

 Sent: Monday, May 09, 2005 4:27 AM

 To: openamf-user@li...

 Subject: [Openamf-user] Returned object null;

I have a problem. 

 

 

 

 THE PROBLEM

 

 All of the code below works up to the point where the

 BMUser instance is received back at the client in the

 login_Result method of UserDirectory.  

 

  I know that a correctly instantiated BMUser instance

 is dispatched by the server, but when it is received

 in the login_Result method of UserDirectory all

 properties are undefined. Furthermore, I put a trace

 method in the constructor of BMUser in AS, assuming it

 would be called [I]before[/I] login_Result. It wasn"t,

 which suggests that the client (ie Flash) did not even

 try to instantiate BMUser.  

 

 

 Any ideas ? I would be most grateful for some help

 

 

 Jake

 

 

 

 

 For the archives, here are the bits that work. I hope

 it well help a few people get up and running a little

 faster than I did. 

 

 My  user bean in  AS: 

 

 NOTE: The property names (not the getter names) in the

 AS class must match the  getter and setter names in

 the java class.

 

 
////////////////////////////////////////////////////////////////////////////
////

 import mx.remoting.NetServices;

 class BMUser {

        public var userName:String;

        public var pword:String;

        public var uid:Number;

        public var lastLogin:Number;

        function BMUser() {

                trace(userName+" "+pword+" "+uid+" "+lastLogin);

        }

        function getUserName():String {

                return userName;

        }

        function setUserName(in_s:String) {

                userName = in_s;

        }

        function getPword():String {

                return pword;

        }

        function setPword(in_s:String) {

                pword = in_s;

        }

        function getUid():Number {

                return uid;

        }

        function setUid(in_id:Number) {

                uid = in_id;

        }

        function getLastLogin():Number {

                return lastLogin;

        }

        function setLastLogin(in_l:Number) {

                lastLogin = in_l;

        }

 }

 

 ----------------------------------------------------------

 

 My communication class in AS:

 

 

 ////////////////////////////////////////////////////////////

 import mx.remoting.NetServices;

 class UserDirectory {

        

        private var gatewayPath:String = "";

        private var servicePath:String = "";

        private var serviceConnection:Object = new Object();

        private var serviceObject:Object = new Object();

        

        

        public static var _instance:UserDirectory

 

 

 

 

        public static function getInstance():UserDirectory

        {

                if(_instance == undefined)

                {

                        _instance = new UserDirectory()

                }

                return _instance

        }

        

        private function UserDirectory() {

                this.gatewayPath = GLOBALS.gatewayPath;

                this.servicePath = "";

        

 this.setServicePath("com.jakestone.bm.remoting.UserDirectory");

                this.setServiceObject();

        }

        function getGatewayPath():String {

                return gatewayPath;

        }

        function setGatewayPath(in_s:String) {

                gatewayPath = in_s;

        }

        function getServicePath():String {

                return servicePath;

        }

        function setServicePath(in_s:String) {

                servicePath = in_s;

        }

        function setServiceObject() {

                trace("UserDirectory settingserviceObject");

                NetServices.setDefaultGatewayUrl(this.gatewayPath);

                this.serviceConnection =

 NetServices.createGatewayConnection();

                this.serviceObject =

 this.serviceConnection.getService(this.servicePath,

 this);

        }

        

        function login(user:BMUser) {

                try {

                        trace("UserDirectory:login

 username="+user.getUserName());

                        trace("UserDirectory:login

 username="+user.getPword());

                        this.setServiceObject();

                        this.serviceObject.login(user);

                } catch (errorObj:Error) {

                        trace(errorObj.message);

                }

        }

        function login_Result(loginresult:BMUser) {

                try {

                        trace("UserDirectory:login_result

 loginresult.getLastLogin()="+loginresult.getLastLogin());

                        if (undefined == loginresult.getLastLogin()) {

                                trace(" Login Failed");

                        } else {

                                trace(" Login Succeeded");

                        }

                } catch (errorObj:Error) {

                        trace(errorObj.message);

                }

        }

 }

 

 ------------------------------------------------------

 

 This works fine.

 

 

 

 SERVER SIDE:

 

 openamf.config.xml

 

 ///////////////////////////////////////////////////////////////////////

 <?xml version="1.0" encoding="UTF-8"?>

 <config>

 

        <!--

        Configure behavior of outgoing AMF messages:

        forceLowerCaseKeys - if true, the hash maps used to

 return custom classes

        will convert all keys to lower case; 

        set this to:

                true if you"re using ActionScript 1.0 on the client,

                false if you"re using ActionScript 2.0 (which is

 case-sensitive)

        -->

        <amf-serializer>

                        <force-lower-case-keys>true</force-lower-case-keys>

        </amf-serializer>

        

        <!-- Required for DefaultGateway-->

        <invoker>

                <name>PageableRecordSet</name>

        

 <class>org.openamf.invoker.PageableResultSetServiceInvoker</class>

        </invoker>

        <invoker>

                <name>SessionControl</name>

        

 <class>org.openamf.invoker.SessionControlInvoker</class>

        </invoker>

        <invoker>

                <name>WebService</name>

                <class>org.openamf.invoker.WebServiceInvoker</class>

        </invoker>

        <invoker>

                <name>JMX</name>

                <class>org.openamf.invoker.JMXServiceInvoker</class>

        </invoker>

        

        <!-- Uncomment this to enable EJB invoker

        <invoker>

                <name>EJB</name>

                <class>org.openamf.invoker.EJBServiceInvoker</class>

        </invoker>

        -->

        

        <invoker>

                <name>Java</name>

        

 <class>org.openamf.invoker.JavaServiceInvoker</class>

        </invoker>

        <pageable-recordset>

                <initial-data-row-count>20</initial-data-row-count>

        </pageable-recordset>

        <!-- 

        Example Custom Class to Java Class mapping

        

        When a class of type org.openamf.examples.Person is

 Serialized

        it will be registered to Person in flash 

        

        When a custom class of Person is Deserialized it

        will be translated to an org.openamf.examples.Person

            -->

        <custom-class-mapping>

        

 <java-class>com.jakestone.bm.datamodel.BMUser</java-class>

                <custom-class>BMUser</custom-class>

        </custom-class-mapping>

 

        <!-- Required  for AdvancedGateway -->

        <!-- 

                This allows you to declare infomation about your

 services,

                instead of having the DefaultGateway guess 

        -->

        <service>

                <name>SessionControlService</name>

                <invoker-ref>SessionControl</invoker-ref>

                <method>

                        <name>close</name>

                        <parameter>

                                <type>*</type>

                        </parameter>

                </method>

        </service>

        <service>

                <name>OpenAMFPageableRecordSet</name>

                <invoker-ref>PageableRecordSet</invoker-ref>

                <method>

                        <name>*</name>

                        <parameter>

                                <type>*</type>

                        </parameter>

                </method>

        </service>

        <service>

                <name>Test</name>

        

 <service-location>com.jakestone.bm.Test</service-location>

                <invoker-ref>Java</invoker-ref>

                <method>

                        <!-- Operation"s are matched by the name and

 parameters -->

                        <name>sayHello</name>

                        <state-bean-ref>

                                <name>Authentication</name>

                        </state-bean-ref>

                        <parameter>

                                <!-- 

                                        type can be the the name of the
class, 

                                        a * for any types,

                                        or a ? any 1 type

                                -->

                                <type>*</type>

                        </parameter>

                </method>

 

        </service>

     <service>

                <name>UserDirectory</name>

        

 
<service-location>com.jakestone.bm.remoting.UserDirectory</service-location>

                <invoker-ref>Java</invoker-ref>

                <method>

                        <!-- Operation"s are matched by the name and

 parameters -->

                        <name>login</name>

                        <state-bean-ref>

                                <name>Authentication</name>

                        </state-bean-ref>

                        <parameter>

                                <!--

                                        type can be the the name of the
class,

                                        a * for any types,

                                        or a ? any 1 type

                                -->

                                <type>*</type>

                        </parameter>

                </method>

 

        </service>

        <state-bean>

                <name>Authentication</name>

                <class>org.openamf.examples.Authentication</class>

                <scope>session</scope>

        </state-bean>

 </config>

 

 -------------------------------------------------------------------------

 

 

 

 

 My service class:

 //////////////////////////////////////////////////////////////////////////

 package com.jakestone.bm.remoting;

 

 import com.jakestone.bm.datamodel.BMUser;

 import com.jakestone.bm.utils.BMLogManager;

 

 import java.util.logging.Level;

 import java.io.Serializable;

 

 /**

  * Created by IntelliJ IDEA.

  * User: Jacob

  * Date: May 8, 2005

  * Time: 8:59:05 PM

  * To change this template use Options | File

 Templates.

  */

 public class UserDirectory implements Serializable

 {

     public BMUser login(BMUser user)

     {

         try

         {

 

            

 BMLogManager.getDefaultLogger().log(Level.INFO,"user

 is "+user.toString());

             user.login();

             return user;

         }

         catch(Exception e)

         {

            

 BMLogManager.getDefaultLogger().log(Level.WARNING,"EXCEPTION

 IN DIRECTORY"+e.toString(),e);

         }

         return null;

     }

 }

 

 ---------------------------------------------------------------

 

 

 and my userbean which talks to a DAO:

 

 //////////////////////////////////////////////////////////////////

 package com.jakestone.bm.datamodel;

 

 import com.jakestone.bm.BMException;

 import com.jakestone.bm.ExceptionEncoder;

 //import com.jakestone.bm.servlet.Constants;

 //import com.jakestone.bm.servlet.XMLWrap;

 import com.jakestone.bm.utils.BMLogManager;

 

 import java.sql.Date;

 import java.util.logging.Level;

 import java.io.Serializable;

 

 

 /**

  * Created by IntelliJ IDEA.

  * User: jake

  * Date: Jun 26, 2004

  * Time: 8:09:42 AM

  * To change this template use Options | File

 Templates.

  */

 public class BMUser extends BMAbstractDataObject

 implements Serializable

 {

 

     private String userName;

     private String pword;

     private long lastLogin;

 

 

     public long getUid()

     {

         return uid;

     }

 

     public void setUid(long in_id)

     {

         uid = in_id;

     }

 

     public BMException getBMException()

     {

         return exception;

     }

 

     public void setBMException(BMException

 in_exception)

     {

         exception = in_exception;

     }

 

     public String getUserName()

     {

         return userName;

     }

 

     public String getPword()

     {

         return pword;

     }

 

     public long getLastLogin()

     {

         return lastLogin;

     }

 

 

     public void setUserName(String in_userName)

     {

         userName = in_userName;

     }

 

     public void setPword(String in_password)

     {

         pword = in_password;

     }

 

     public void setLastLogin(long in_lastLogin)

     {

         lastLogin = in_lastLogin;

 

     }

 

     public Date showLastLogin()

     {

         return new Date(lastLogin);

     }

 

 

     protected void doInsert() throws

 BMDataModelException

     {

        

 //BMLogManager.getDefaultLogger().log(Level.FINE,

 "inserting ");

         BMUserMgr.getInstance().doInsert(this);

     }

 

     protected void doUpdate() throws

 BMDataModelException

     {

         BMUserMgr.getInstance().doUpdate(this);

     }

 

     public void doPopulate() throws

 BMDataModelException

     {

         BMUserMgr.getInstance().populate(this);

     }

 

     public void doDelete() throws BMDataModelException

     {

         BMUserMgr.getInstance().delete(this);

     }

 

     public void populate(String un, String pw) throws

 BMDataModelException

     {

         this.userName = un;

         this.pword = pw;

         BMUserMgr.getInstance().populate(this);

     }

 

     protected void validate() throws BMException

     {

         if (null == pword || null == userName)

         {

            

 BMLogManager.getDefaultLogger().log(Level.WARNING,

 "Username or pword is blank");

 

             BMException exc = new

 BMException("Username or pword is blank");

             exc.setHumanMessage("Username or pword is

 blank");

 

             throw  exc;

         }

 

         if (userName.length() > 16)

         {

            

 BMLogManager.getDefaultLogger().log(Level.WARNING,

 "User name longer than 16 characters");

             BMException exc = new BMException("User

 name longer than 16 characters");

             exc.setHumanMessage("User name longer than

 16 characters");

 

             throw  exc;

         }

         else if (userName.length() > 16)

         {

            

 BMLogManager.getDefaultLogger().log(Level.WARNING,

 "Password longer than 16 characters");

             BMException exc = new

 BMException("Password longer than 16 characters");

             exc.setHumanMessage("Password longer than

 16 characters");

 

             throw  exc;

         }

     }

 

     public void login()

     {

         try

         {

 

                 try

                 {

                    

 BMLogManager.getDefaultLogger().log(Level.FINE, "db is

 local");

 

                    

 BMUserMgr.getInstance().login(this);

 

 

                 }

                 catch (Exception e)

                 {

                    

 BMLogManager.getDefaultLogger().log(Level.FINE,

 e.getMessage());

                    

 setBMException(ExceptionEncoder.encodeException(e));

                 }

 

 

         }

         catch (Exception e)

         {

 

            

 this.setBMException(ExceptionEncoder.encodeException(e));

 

 

            

 BMLogManager.getDefaultLogger().log(Level.FINE,

 "standard exception" + e.getMessage());

         }

 

     }

 

     public String toString()

     {

         return super.toString() + "\r\nuser=" +

 userName + "\r\nlastlogin=" + lastLogin;

     }

 

 }[/as]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.