2009-12-09 50 views
2

我使用GraniteDS Actionscript code generation templates,讓我拿一個Java對象並將其轉換爲一個Actionscript類。從Java類自定義花崗岩DS腳本代碼生成

它主要用於BlazeDS Java到Flash的通信,但我正在適應它使用JSON webservices使用XStream/JETTISON JSON。

是否可以使用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 { 

這可能與Groovy的模板?

我似乎無法找到有關GraniteDS Groovy模板JavaType中可用屬性的任何文檔? GraniteDS網站上列出的用於JavaType的文檔將轉到損壞的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 {<% 

回答

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 {<%