Frage

Ich benutze Graniteds ActionScript -Code -Generierung Vorlagen Lassen Sie mich ein Java -Objekt nehmen und es in eine ActionScript -Klasse konvertieren.

Es wird hauptsächlich für Blazeds Java zur Flash -Kommunikation verwendet, aber ich adaptiere es für die Arbeit mit JSON -Webservices mit Xstream/Jettison JSON.

Ist es möglich, die Granit -DS -Groovy -Vorlagen zu verwenden, um Anmerkungen in einer Java -Klasse zu inspizieren und diese zu verwenden, um die Codebindungen zu generieren?

Zum Beispiel erstelle ich einen @xstreamalias, um den Klassennamen zu verkürzen, wenn ich über JSON gesendet wird, aber ich brauche mein ActionScript -generierter Klassen, um dies auch zu unterstützen.

package com.webwars.game;
@XStreamAlias("UnitStack")
public class UnitStack implements Serializable {

Ich möchte, dass mein ActionScript -generierter Code ist:

package com.webwars.gameplatform.combat.pvp {

    [Bindable]
    [RemoteClass(alias="UnitStack")]
    public class UnitStack extends UnitStackBase {

Ist das mit den groovigen Vorlagen möglich?

Ich kann scheinbar keine Dokumentation darüber finden, welche Eigenschaften im Graniteds Groovy Template Javatype verfügbar sind? Die auf der Graniteds -Website für Javatype aufgeführte Dokumentation geht zu einem kaputten Javadoc -Link.

Zum Beispiel in meiner Bean.gsp kann ich so etwas tun wie:

<%

    ///////////////////////////////////////////////////////////////////////////
    // 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 {<%
War es hilfreich?

Lösung

Ich entdeckte den Quellcode für Javabean.java >> JavaabstractType.java die eine Methode enthält, um die Klasse zu erhalten:

public abstract class JavaAbstractType implements JavaType {
    public Class<?> getType() {
        return type;
    }

Also im Groovy Bean.gsp Vorlage Ich habe es geändert, um Xstream -Aliased -Klassen zu unterstützen:

<%
    //////////////////////////////////
    /// 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 {<%
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top