質問

私は GraniteDSのActionScriptコード生成テンプレートを使用していますそれは私がJavaオブジェクトを取得し、ActionScriptクラスに変換してみましょう。

これは、フラッシュの通信にBlazeDSのJava用主に使われていますが、私はそれがXStreamの/投棄JSONを使用してJSONのWebサービスと連携するように適応しています。

これは、Javaクラスに注釈を検査し、コードのバインディングを生成するためにそれを使用する花崗岩DS Groovyのテンプレートを使用することは可能ですか?

たとえば、私は、JSONを介して送信されるときに、クラス名を短縮する@XStreamAliasを作成するが、私は私の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のテンプレートのJavaTypeで使用可能なプロパティ上の任意のドキュメントを見つけるように見えることはできませんか? JavaTypeためGraniteDSサイトに記載されているドキュメントが壊れたの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 {<%
役に立ちましたか?

解決

私は<のhref = "https://granite.svn.sourceforge.net/svnroot/granite/graniteds_builder/trunk/src/org/granite/generator/as3/reflect >> JavaBean.javaのソースコードを発見しました

:クラスを取得するためのメソッドが含まれてい/JavaAbstractType.java」のrel = "nofollowをnoreferrer"> JavaAbstractType.javaする
public abstract class JavaAbstractType implements JavaType {
    public Class<?> getType() {
        return type;
    }

は、Groovyの中のSOの bean.gsp のテンプレート私は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