Вопрос

я использую Шаблоны генерации кода Graniteds Graniteds Это позволяет мне взять объект Java и преобразовать его в класс ActionScript.

В основном он используется для Blazeds Java для вспышки связи, но я адаптирую его для работы с JSON Webservices, используя Xstream/Jettison JSON.

Можно ли использовать 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 Template 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 {<%
Это было полезно?

Решение

Я обнаружил исходный код для javabean.java >> Javaabstracttype.java который содержит метод для получения класса:

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

Так в Groovy bean.gsp Шаблон I модифицировал его, чтобы поддержать классы 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 {<%
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top