Javaクラスから花崗岩DS ActionScriptコード生成のカスタマイズ
-
18-09-2019 - |
質問
私は 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 {<%