S2Flex2 を触ってみた その2

うーむ。助言を頂いたがまだ繋がらない。

AMF0Connection

package org.seasar.flex2.rpc.remoting {
        
        import flash.events.Event;
        import flash.net.NetConnection;
        import flash.net.ObjectEncoding;
        import flash.net.Responder;
        import flash.util.trace;
        
        import mx.events.EventDispatcher;
        import mx.rpc.events.FaultEvent;
        import mx.rpc.events.ResultEvent;
        import mx.rpc.AbstractService;
        import mx.utils.Delegate;
        
        import org.seasar.flex2.net.AMF0Connection;

        /**
         * 
         * @author nod
         * @author sato-shi
         * 
         */
        dynamic public class SimpleAMF extends AbstractService
        {
                [DefaultTriggerEvent("result")]

                /** @private
                */
                [Event("fault")]
                /** @private
                */
                [Event("result")]
            private var _con:AMF0Connection;
                     
            
            [Inspectable(type="String")]
                public var gatewayUrl:String;
                  
                public function SimpleAMF(){
                        super();
                }
                
                private function initConnection(){
                        _con = new AMF0Connection();
                        //_con.objectEncoding = ObjectEncoding.AMF0;
                        _con.addHeader("DescribeService", false, 0);
                        _con.connect(this.gatewayUrl);
                        
                }

                public function remoteCall(methodName:Object, args:Object):void {
                        if(_con==null){
                                initConnection();
                        }
                        
                        var callMethod:String =this.destination +"." +methodName; 

                        var responder:Responder = new Responder(this.onResult,this.onFault);

                        if(args){
                                _con.call(callMethod,responder,args);
                        }else{
                                _con.call(callMethod,responder);
                        }
            }
            
            public function onResult(resultData:Object){
            		
                    var resultEvent:ResultEvent=new ResultEvent(resultData,null,null);
                    dispatchEvent(resultEvent);
            }
            
            public function onFault(faultData:Object){
                    var faultEvent:FaultEvent = new FaultEvent(faultData,null,null);
                    dispatchEvent(faultEvent);
                    
            }
        }
}

Person.as

package flexcoder.java2as3.sample {
	
	[Bindable]
	[RemoteClass(alias="org.openamf.examples.Person")]
	public class Person{
		
		public var firstName : String;
		public var lastName : String;
		public var address : String;
		public var city : String;
		public var state : String;
		public var zipCode : int;
		public var birthDate : Date;
		public var extraInfo : Array;
	}
}

s2flex2.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.macromedia.com/2005/mxml" 
        xmlns="*"
        xmlns:s2="org.seasar.flex2.rpc.remoting.*"  layout="absolute" >
		<s2:SimpleAMF id="amf" destination="org.openamf.examples.TestBean" gatewayUrl="http://localhost:8080/openamf/gateway"  result="onResult(event)" fault="onFault(event)"/>

<mx:Script>
        <![CDATA[
        	import org.seasar.flex2.rpc.remoting.SimpleAMF;
                import mx.controls.Alert;
                import mx.rpc.events.FaultEvent;
                import mx.rpc.events.ResultEvent;
                import flash.events.Event;
                import mx.utils.ObjectUtil;
                import org.seasar.flex2.rpc.remoting.SimpleAMF;
                import  flexcoder.java2as3.sample.Person;
                import flash.util.trace;
                import flash.net.registerClassAlias;
                
                [Bindable]
                public var array:Array;
                [Bindable]
                public var person:Person;
                
                public function doRemoteCall():void{

                        //openAMFsample 
                        //amf.remoteCall("getTestValue");
                        amf.remoteCall("getPerson",null);
                        //amf.remoteCall("hello");
                }
                public function onResult(event:Event){

                        person = Person(ResultEvent(event).result);
                        
                }
                
                public function onFault(event:Event){
                		trace(event);
                        //result_txt.text=mx.utils.ObjectUtil.toString( FaultEvent(event).fault );
                }
        ]]>
</mx:Script>
			
        <mx:TextArea x="10" y="20" id="result_txt"/>
        <mx:Button x="118" y="19" label="getTestValue" id="trigger_btn" click="doRemoteCall();"/>
</mx:Application>

他に足りないことは・・・。