【问题标题】:Customizing Granite DS Actionscript code generation from Java classes从 Java 类自定义 Granite DS Actionscript 代码生成
【发布时间】:2009-12-09 22:11:14
【问题描述】:

我正在使用GraniteDS Actionscript code generation templates,让我获取一个Java 对象并将其转换为一个Actionscript 类。

它主要用于 BlazeDS Java 到 Flash 的通信,但我正在调整它以使用 XStream/JETTISON JSON 与 JSON 网络服务一起使用。

是否可以使用 Granite DS Groovy 模板来检查 Java 类上的注释并使用它来生成代码绑定?

例如,当通过 JSON 发送时,我创建了一个 @XStreamAlias 来缩短类名,但我还需要我的 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 {<%

【问题讨论】:

    标签: java actionscript-3 groovy code-generation graniteds


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 1970-01-01
      • 2012-05-30
      • 2016-10-03
      • 2015-11-24
      • 1970-01-01
      • 2021-01-21
      • 2018-12-29
      • 1970-01-01
      相关资源
      最近更新 更多