Personnalisation de Granit DS code Actionscript génération de classes Java
-
18-09-2019 - |
Question
Je suis à l'aide d' GraniteDS code Actionscript modèles de génération pour que laissez-moi prendre un objet Java et de le convertir à une classe Actionscript.
Il est principalement utilisé pour BlazeDS Java Flash de communication mais je suis en l'adaptant à travailler avec les webservices JSON à l'aide de XStream/LARGUER JSON.
Est-il possible d'utiliser le Granit DS Groovy modèles d'inspecter des annotations sur une classe Java et l'utiliser pour générer le code de liaisons?
Par exemple, j'ai créer un @XStreamAlias de raccourcir le nom de la classe si elle est envoyée via JSON, mais j'ai besoin de mon code Actionscript classes générées à l'appui de ce que bien.
package com.webwars.game;
@XStreamAlias("UnitStack")
public class UnitStack implements Serializable {
Je veux que mon Actionscript code généré à:
package com.webwars.gameplatform.combat.pvp {
[Bindable]
[RemoteClass(alias="UnitStack")]
public class UnitStack extends UnitStackBase {
Est-ce possible avec le groovy modèles?
Je n'arrive pas à trouver toute la documentation sur quelles propriétés sont disponibles dans la GraniteDS Groovy Modèle JavaType?Les documents énumérés sur le GraniteDS site pour JavaType va à une fracture de la Javadoc lien.
Par exemple dans mon haricot.gsp puis-je faire quelque chose comme:
<%
///////////////////////////////////////////////////////////////////////////
// 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 {<%
La solution
J'ai découvert le code source pour le JavaBean.java >> JavaAbstractType.java qui contient une méthode pour obtenir la Classe:
public abstract class JavaAbstractType implements JavaType {
public Class<?> getType() {
return type;
}
Ainsi, dans le Groovy haricot.spg modèle je l'ai modifié pour soutenir XStream alias classes:
<%
//////////////////////////////////
/// 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 {<%