Glassfish で実行されるアプリを Websphere Application Server (WAS) 8.5.x バージョンに移行する必要があります。
簡単なセットアップで正しく動作することを確認するために、1 つのレスト サービスを含むサンプル プロジェクトを作成しました。
javax.ws.rs.core.Application を独自のクラスで拡張せず、パス アノテーションを含むクラスしかありません。「javax.ws.rs.core.Application」という名前の web.xml でサーブレットを定義したので、注釈がスキャンされ、指定されたサーブレット URL マッピングからサービスに到達できることが期待されます。
サービスにアクセスしようとすると、404 メッセージが表示されます。しかし、本当の問題は、標準の IBM Websphere ライブラリーに付属する Apache Wink です。
ライブラリのソース コード(クラス DefaultLifecycleManager) には、次のような部分があります。
79 if (ApplicationMetadataCollector.isApplication(cls)) {
80 // by default application subclasses are singletons
81 return LifecycleManagerUtils.createSingletonObjectFactory(cls);
82 }
isApplication (cls)メソッドは true を返す必要があり、それに対するシングルトン ファクトリを作成する必要があります。ただし、false を返します。メソッドの本体は次のとおりです。
76 public static boolean More ...isApplication(Class cls) {
77 return Application.class.isAssignableFrom(cls);
78 }
そこにブレークポイントを置き、値を確認しました。cls はまさに javax.ws.rs.core.Application で、77 行目の同じクラスです。
これにより、サーブレットが正しく起動せず、それにマップされるすべてのリクエストに 404 が返されます。
このメソッドがどのように false を返すのかわかりません。助けが必要です。