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 {

使用 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 {<%
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 回答