0

Acceleo を使用して、テンプレートで Java コードを呼び出そうとしています。そこに与えられたコード: http://wiki.eclipse.org/Acceleo/FAQ#How_to_use_a_Java_service_in_Acceleoは正常に動作しますが、私のコードは動作せず、エラーも見つかりません。

ここで私のJava関数:

public String test(softo.Activite activity) {
     return activity.getModXName();
}

およびテンプレート コード:

[query public getTest(a : Activite) : String = invoke('org.eclipse.acceleo.softogen.files.Utility','test(softo.Activite activity)', Sequence{a}) /]
[template public createOperationUrl(activity : AccessibleActivite) ]
Result : [getTest(activity)/]
[/template]

また、return 関数を return 'foobar' に置き換えようとしましたが、どちらも機能しません。生成時にメッセージはありません。ファイルには「結果:」が含まれているだけです。また、使用するパスとファイル名も確認しました。

問題を解決するためのアイデアはありますか?

編集:わかりました!私はついに答えを見つけました...それは本当にばかげています:クエリコードでは、引数名を入力する必要はなく、型だけを入力する必要があるため:

[query public getTest(a : Activite) : String = invoke('org.eclipse.acceleo.softogen.files.Utility','test(softo.Activite activity)', Sequence{a}) /]

なりました :

[query public getTest(a : Activite) : String = invoke('org.eclipse.acceleo.softogen.files.Utility','test(softo.Activite)', Sequence{a}) /]

そしてそれは機能します...知っておくとよい=)

4

2 に答える 2

0

マニフェストに Java サービスを含むパッケージをエクスポートしましたか? そうでない場合は、ファイル MANIFEST.MF を開き、ランタイム タブに移動して、Java クラスを含むパッケージをエクスポートします。RuntimeException()サービスが確実に呼び出されるようにする場合は、Java メソッドの「return」の前にnew をスローすることもできます。

于 2011-07-07T12:37:29.350 に答える