Anpassung von Granite DS ActionScript -Code -Coding -Generierung aus Java -Klassen
-
18-09-2019 - |
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 {<%
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 {<%