読者です 読者をやめる 読者になる 読者になる

文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

slim3の@Pageと@ActionPathに定数クラスを設定するとコンパイルに失敗する?

java gae slim3

tree-tipsはGAE/Jでslim3とscenic3を組み合わせて作っているのですが、
標題の通り、どうも自動コンパイルがおかしな挙動をします。
@Pageと@ActionPathに文字列でなくクラスを設定した際に起きやすいです。

コンパイルに成功する例

@Page("/guava/")
public class GuavaPage extends BasePage {
	@ActionPath("strings/")
	public Navigation strings() {
		setTitle("com.google.common.base.Strings");
		setUrl(GuavaPage.class);
		return setForard(getFilePath(BASE_PATH, "strings.jsp"));
	}

コンパイルに失敗する例1

@Page(Url.GUAVA.BASE)
public class GuavaPage extends BasePage {
	@ActionPath("strings/")
	public Navigation strings() {
		setTitle("com.google.common.base.Strings");
		setUrl(GuavaPage.class);
		return setForard(getFilePath(BASE_PATH, "strings.jsp"));
	}

コンパイルに失敗する例2

@Page("/guava/")
public class GuavaPage extends BasePage {
	@ActionPath(Url.GUAVA.STRINGS)
	public Navigation strings() {
		setTitle("com.google.common.base.Strings");
		setUrl(GuavaPage.class);
		return setForard(getFilePath(BASE_PATH, "strings.jsp"));
	}

コンパイルに失敗する例3

@Page(Url.GUAVA.BASE)
public class GuavaPage extends BasePage {
	@ActionPath(Url.GUAVA.STRINGS)
	public Navigation strings() {
		setTitle("com.google.common.base.Strings");
		setUrl(GuavaPage.class);
		return setForard(getFilePath(BASE_PATH, "strings.jsp"));
	}

正確には、失敗するというか、失敗する事がある・中途半端なコンパイルになる、という状態です。
ローカルでは何故か動いても、デプロイした後に画面を見ると、以下のエラーが起きていました。

scenic3.UncompleteAnnotationException: Controller class creation error.
	at scenic3.UrlMatcherImpl.match(UrlMatcherImpl.java:57)
	at scenic3.UrlsImpl.createController(UrlsImpl.java:47)

URLを定数化してメニュー部分等で利用してたのですが、
こんな現象が起きた為、仕方なくアノテーション部分は文字列ベタ書きするようにしました。
何とかならないのかこれ・・・