我正在使用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 {<%
答案 0 :(得分:2)
我发现了JavaBean.java的源代码&gt;&gt; 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 {<%