S2Strutsでwebパッケージにpackage-info.javaを置くとエラーになる
S2Strutsで、Actionクラスを配置しているwebパッケージにpackage-info.javaを置くと、こんなエラーが出て、アプリケーションが起動しない。
致命的: action: null org.seasar.framework.exception.EmptyRuntimeException: [ESSR0007]suffixはnullあるいは空であってはいけません at org.seasar.framework.convention.impl.NamingConventionImpl.fromSuffixToPackageName(NamingConventionImpl.java:441) at org.seasar.framework.convention.impl.NamingConventionImpl.fromClassNameToComponentName(NamingConventionImpl.java:464) at org.seasar.struts.lessconfig.config.rule.impl.SubApplicationActionFormNamingRule.toActionFormName(SubApplicationActionFormNamingRule.java:39) (略)
package-info.javaは、Java5から導入された仕組みなので対応してなさそう。
NamingConventionImplを拡張して、package-infoっていう名前のクラスは除外するようにしたらうまく動いた。
public class NamingConventionImpl extends org.seasar.framework.convention.impl.NamingConventionImpl { @Override public String fromClassNameToComponentName( String className ) { if( className.endsWith( "package-info" ) ) { // package-info.javaは無視 return null; } return super.fromClassNameToComponentName( className ); } }
このクラスのパッケージは、「~.impl」の下に置かないとダメ。
たぶん、クラス名がImplで終わっているので、Seasarは、そのインターフェースを探そうとするが、implパッケージの下に無くて困っている様子。
最後に、convention.diconのクラス指定を、拡張したクラスに変更すればOK。