OpenAMF openamf-config.xml 配置
第一个标签
<amf-serializer>
<force-lower-case-keys>false</force-lower-case-keys>
</amf-serializer>
这个标签的存在的意义在于当openamf发送传递给Flash 客户端的AMF消息时,是否把用来返回自定义类的Hashmap里面的key转换成小写。
一边情况下,当我们发送一个hashmap给客户端时,客户端把它当作一个custom class的object来对待。
比如你有一个java方法返回一个hashmap
public Hashmap getValue(){
Hashmap resultObj=new Hashmap();
result.put("nameSpace","com.flashseer.org");
return resultObj;
}
在actionscript中你可以用
resultObj.nameSpace
的写法来引用java里面hashmap中的一个值。
当你把这个标签的属性设置为true的时候,返回给Flash client的object中,所有的key都被转换成小写。
所以,如果你使用Actionscript2.0的时候,因为AS2区分大小写。你就不可能用resultObj.nameSpace来引用了。
因为,nameSpace已经被转换为小写了。你必须使用namespace来引用。
这里,官方的example里面注释说了,
如果你用actionscrpt2.0的话,把这个设置为false。否则,如果你用了大写的字母作为key,在客户端就会出问题。
如果你用as1的话,可以设置为true
第二个标签
<invoker>
<name>Java</name>
<class>org.openamf.invoker.JavaServiceInvoker</class>
</invoker>
这个标签是用来调用java端的服务的。
这里,提供了许多的invoker供你使用。
放在这里的是最常用的一个invoker。这个invoker的作用就是根据service的位置在classpath里面找到这个class,并且调用其中的方法。
另外,还可以使用其他的invoker,
比如EJB,Spring,WebService都是非常实用的invoker.
按照需要,放置这些invoker.
可以在example的配置文件里找到所有的invoker
第三个标签:自定义类的映射
<custom-class-mapping>
<java-class>org.openamf.examples.Person</java-class>
<custom-class>org.openamf.examples.Person</custom-class>
</custom-class-mapping>
这个映射的作用是让你的FlashClient接收到正确的类型。
比如,在flashclient端,你调用一个方法后,接收到一个resultObj
如果你不进行类型映射,那么,这个resultObj是没有类型的。他就是一个object.你无法使用这个object的方法,只能通过引用属性的方法引用到属性。
但是,如果你在这里做了映射,在flash里面就可以得到一个具有类型的object。
用 trace(resultObj instanceof org.openamf.examples.Person) 就可以看到效果。
这个标签可以重复,映射多个自定义class
第四个标签:命名你的service(注意,这个部分需要使用advancedGateway)
<service>
<!--name这个 node定义一下你的service的名字,这样,你就不用在flash里面把你的整个class都写在里面了,而只需要用这个name来代替-->
<name>Directory</name>
<!--这个标签的作用其实就是让你指定你上面定义的那个name对应哪个class。-->
<service-location>org.flashseer.Example</service-location>
<!---这个标签 同上面的invoker标签对应,这样,一旦advancedGateway发现了你定义的这个service,就不用遍历所有的invoker来查找相应的服务。
注意如果你没有定义这个的话,默认情况下,openamf会给所有可能的class打一个分,取分最高的来调用--->
<invoker-ref>Java</invoker-ref>
<!--这里定义一下需要call的方法-->
<method>
<!-- 方法名 -->
<name>addPerson</name>
<!--参数定义,这里的参数可以使用一个class的名字或者使用通配符,
*就代表许多个参数,?代表一个参数-->
<parameter>
<type>*</type>
</parameter>
<!-- 这个result-filter实际上是可以自己来写实现的。实现org.openamf.filter.ResultFilter即可
其中,class标签中,是你需要使用的filter。 你可以使用两个由openamf提供的filter,也可以自己来实现。
其中parameter的两个标签其实就是一个自定义的object,你可以自己随便定义然后,在实现filter的时候来使用。
-->
<result-filter>
<class>org.openamf.filter.BeanListToRecordSet</class>
<parameter>
<name>ignore</name>
<value>extraInfo</value>
</parameter>
</result-filter>
</method>
</service>
这个标签的意义在于它可以帮助你更快,更方便的找到flash remoting说调用的service.前面也提到了,如果你不指定的话,可能会导致每次openamf都要去做match,计算匹配值,然后取高的。
- 浏览: 26312 次
- 性别:
- 来自: 郑州
相关推荐
通过java客户端调用openamf协议的实例,把取回的结果转换成list或bean. 这个实例是我调查好几天才整出来的.
FLEX连接java的开源框架
openamf openamf-1.0RC12 openamf实例 openamf+flash实例 openamf最完整实例java + flash+eclipse工程源码
openamf,java版本的remoting
第十五节 OPENAMF.docx
openamf-1.0RC12-exampless.rar
NULL 博文链接:https://balan326.iteye.com/blog/1285663
openamf相关文件 博文链接:https://kt8668.iteye.com/blog/115607
amf开源,flash客户端服务器端通讯协议的序列化类,rtmp的底层类
已经在早前就听说了,Adobe公司的开源项目bazeds,可是当时做flash,用到了openamf,所以没有在意,但是现在觉得flex开发应用软件更具有杀伤力,所以准备研究flex。折腾了一周的时间想做个flex+java的helloworld例子...
Moonfree是使用Flex2-Java通信开发RIA的开源框架。 集成flex-openamf-spring-java并添加服务器/客户端通信层。