Pergunta

estou a usar Modelos de geração de código do ActionScript de Graniteds Isso me permite pegar um objeto Java e convertê -lo em uma classe ActionScript.

É usado principalmente para o Blazeds Java para piscar a comunicação, mas estou adaptando -o para funcionar com o JSON WebServices usando o XStream/Jettison JSON.

É possível usar os modelos Granite DS Groovy para inspecionar anotações em uma classe Java e usá -la para gerar as ligações de código?

Por exemplo, eu crio um @xstreamalias para encurtar o nome da classe quando enviado pelo JSON, mas preciso que minhas classes geradas pelo ActionScript também.

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

Eu quero que meu código gerado pelo ActionScript seja:

package com.webwars.gameplatform.combat.pvp {

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

Isso é possível com os modelos Groovy?

Não consigo encontrar nenhuma documentação sobre quais propriedades estão disponíveis no modelo Graniteds Groovy Javatype? A documentação listada no site Graniteds para o Javatype vai para um link Javadoc quebrado.

Por exemplo, no meu bean.gsp posso fazer algo como:

<%

    ///////////////////////////////////////////////////////////////////////////
    // 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 {<%
Foi útil?

Solução

Descobri o código -fonte do Javabean.java >> Javaabstracttype.java que contém um método para obter a classe:

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

Então, no groovy bean.gsp Modelo I Modifiquei para apoiar as classes Aliases do 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 {<%
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top