web-dev-qa-db-ja.com

問題Resteasy 3.09 CorsFilter

Resteasy 3.0.9で利用可能な新しいCorsFilterを使用しようとしました。このページの下部で例を見つけました: JAX-RS/RESTEasyがCORSを実装したAjaxリクエスト

Applicationサブクラスの)getSingletons()メソッドでこのフィルターを定義すると、リソースはスキャンされなくなります。つまり、リソースが見つからず、次のエラーが発生します。

_javax.ws.rs.NotFoundException: Could not find resource for full path Error Occures_

次のページで説明を見つけました: javax.ws.rs.NotFoundException:フルパスのリソースが見つかりませんでしたエラーが発生しました

しかし、基本的に、この展開オプションは、アプリケーションの@ Path、@ Providerなどの注釈をスキャンします。その理由は、JAX-RSは最初にそれぞれオーバーライドされたgetClasses()とgetSingletons()でクラスとオブジェクトを探すからです。その後、空のセットを返す場合、JAX-RSに(仕様に従って)スキャンを実行するよう指示します。

getSingletons()メソッドを上書きすると、JAX-RSはスキャンを実行しませんか?このCorsFilterを設定し、リソーススキャンを有効にする別の方法はありますか?

16
puzste

「このCorsFilterを構成し、リソーススキャンを有効にする別の方法はありますか?」

スキャンを維持する1つの方法は、単に _javax.ws.rs.core.Feature_ を実装することです

_import javax.ws.rs.core.Feature;
import javax.ws.rs.core.FeatureContext;
import javax.ws.rs.ext.Provider;
import org.jboss.resteasy.plugins.interceptors.CorsFilter;

@Provider
public class CorsFeature implements Feature {

    @Override
    public boolean configure(FeatureContext context) {
        CorsFilter corsFilter = new CorsFilter();
        corsFilter.getAllowedOrigins().add("*");
        context.register(corsFilter);
        return true;
    }  
}
_

この機能は、他のすべての_@Provider_ sおよび_@Path_ sと同様にスキャンされます。

のみでテストする

_@ApplicationPath("/api")
public class RestApplication extends Application {
}
_

C:\>curl -i http://localhost:8080/api/simple -H "Origin:stackoverflow.com" HTTP/1.1 200 OK Date: Wed, 01 Apr 2015 12:07:22 GMT Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: stackoverflow.com Content-Type: application/octet-stream Content-Length: 15 Server: Jetty(9.2.4.v20141103)

_Hello Response!_

31
Paul Samsotha