2

私は、GraniteDS Actionscript コード生成テンプレートを使用しています。これにより、Java オブジェクトを受け取り、それを Actionscript クラスに変換できます。

主に BlazeDS Java から Flash への通信に使用されますが、XStream/JETTISON JSON を使用して JSON Web サービスで動作するように調整しています。

Granite DS Groovy テンプレートを使用して Java クラスのアノテーションを検査し、それを使用してコード バインディングを生成することはできますか?

たとえば、@XStreamAlias を作成して、JSON 経由で送信されるときにクラス名を短縮しますが、それをサポートするために Actionscript で生成されたクラスも必要です。

package com.webwars.game;
@XStreamAlias("UnitStack")
public class UnitStack implements Serializable {

Actionscript で生成されたコードを次のようにしたい:

package com.webwars.gameplatform.combat.pvp {

    [Bindable]
    [RemoteClass(alias="UnitStack")]
    public class UnitStack extends UnitStackBase {

これはグルーヴィーなテンプレートで可能ですか?

GraniteDS Groovy Template JavaType で使用できるプロパティに関するドキュメントが見つからないようです。JavaType の GraniteDS サイトにリストされているドキュメントは、壊れた Javadoc リンクに移動します。

たとえば、私の bean.gsp では次のようなことができます:

<%

    ///////////////////////////////////////////////////////////////////////////
    // Use the XStreamAlias annotation as the classname

    def alias = jClass.qualifiedName;
    if (jClass.hasAnnotation("XStreamAlias)) {
      alias = jClass.getAnnotation("XStreamAlias");    
    } 

%>

[Bindable]
[RemoteClass(alias="${alias}")]
public class ${jClass.as3Type.name} extends ${jClass.as3Type.name}Base {<%
4

1 に答える 1

2

クラスを取得するメソッドを含むJavaBean.java >> JavaAbstractType.javaのソース コードを発見しました。

public abstract class JavaAbstractType implements JavaType {
    public Class<?> getType() {
        return type;
    }

そのため、Groovy bean.gspテンプレートで、XStream エイリアス クラスをサポートするように変更しました。

<%
    //////////////////////////////////
    /// Check if class has been Aliased by XStream
    def alias = jClass.qualifiedName;
    def actualClass = jClass.type;

    if (jClass.isAnnotationPresent(
                        com.thoughtworks.xstream.annotations.XStreamAlias.class)) {
        com.thoughtworks.xstream.annotations.XStreamAlias xstreamAlias = actualClass.getAnnotation(com.thoughtworks.xstream.annotations.XStreamAlias.class);
        alias = xstreamAlias.value();
    }
%>
[Bindable]
[RemoteClass(alias="${alias}")]
public class ${jClass.as3Type.name} extends ${jClass.as3Type.name}Base {<%
于 2009-12-10T00:34:50.173 に答える