Top | 戻る
AMF3用のクラスを自動生成する
FDS を使ったアプリケーションの開発では、
Java のクラスと同じ構造のクラスを ActionScript で作成することが欠かせません。
しかし、全く同じ構造のクラスを二回も作るのは退屈で無駄な作業です。
そこで、自動生成をしてみることにします。
自動生成をするにあたって特別なツールを用意するのはたいへんなので、
今回は Eclipse に含まれている Apache Ant を利用します。
図1が自動生成イメージです。
Java、ActionScript のソースの代わりに XMLでクラスを定義しておき、
Apache Ant で XSL変換を実行して各言語のソースを出力します。
この手法は、Flex に限らず様々なプログラミング言語やフレームワークで応用が可能です。
図1 自動生成イメージ
Ant の build.xml は、以下のように作成します。
build.xml
<?xml version="1.0" encoding="Utf-8" ?>
<project default="all">
<!-- 出力先 -->
<property name="outputDir" value="${basedir}/output"/>
<target name="all" depends="generate">
</target>
<target name="generate">
<xslt basedir="src" destdir="${outputDir}/java" style="templates/Java.xsl">
<mapper type="glob" from="*.xml" to="*.java"/>
</xslt>
<xslt basedir="src" destdir="${outputDir}/flex" style="templates/AS3.xsl">
<mapper type="glob" from="*.xml" to="*.as"/>
</xslt>
</target>
</project>
以下のようにクラス定義ファイルを作成します。
Person.xml
<?xml version="1.0" encoding="Utf-8" ?>
<Class package="myproject.entities"
name="Person" comment="人">
<Property name="name" comment="名前" type="String"/>
<Property name="birthDate" comment="生年月日" type="Date"/>
</Class>
自動生成されたソースは以下のようになります。
Person.java
package myproject.entities;
public class Person {
public Person() {
super();
}
private java.lang.String name;
public java.lang.String getName() {
return name;
}
public void setName(java.lang.String name) {
this.name = name;
}
private java.util.Date birthDate;
public java.util.Date getBirthDate() {
return birthDate;
}
public void setBirthDate(java.util.Date birthDate) {
this.birthDate = birthDate;
}
}
Person.as
package myproject.entities {
[Bindable]
[RemoteClass(alias="myproject.entities.Person")]
public class Person {
public function Person() {
super();
}
private var _name : String;
public function get name() : String {
return _name;
}
public function set name(name : String) : void {
_name = name;
}
private var _birthDate : Date;
public function get birthDate() : Date {
return _birthDate;
}
public function set birthDate(birthDate : Date) : void {
_birthDate = birthDate;
}
}
}
Contents Copyright © Kazuhiko Arase