我正在使用GraniteDS Actionscript code generation templates,让我获取一个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 {<%

最佳答案

我发现了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 {<%

关于java - 从Java类自定义Granite DS Actionscript代码生成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1877277/

10-11 17:13