簡體   English   中英

Jersey Provider沒有以編程方式獲取Context

[英]Jersey Provider is not getting Context programmatically

我以編程方式在Jersey中啟動REST Web服務,我需要它來為AuthN / AuthZ目的打包2PP Provider。 問題是2PP Provider無法解析@Context。 我在下面提供了一個代碼片段,其中包含正在執行的代碼。

需要集成的提供者

package com.fctest.restful.hello.provider;

@Component (immediate = true)
@javax.ws.rs.ext.Provider
public class MyDummyProvider
{
    @Context
    protected javax.inject.Provider<ContainerRequestContext> containerRequestContextProvider;
    //The above var is NULL causing calls to fail for this class.
}

我的Web服務代碼

@Activate
public void activate(BundleContext bctx)
{
    registerServlet(bctx);
    registerDummyResource();
    packages("com.fctest.restful.hello.provider");
    myContainer.reload(this);
}

private void registerServlet(BundleContext bctx)
{
    try
    {
        HttpService httpService = bctx.getService(bctx.getServiceReference(HttpService.class));
        Dictionary<String, String> jerseyServletParams = new Hashtable<String, String>();
        jerseyServletParams.put("javax.ws.rs.Application", NoAnnotateRest.class.getName());
        httpService.registerServlet("/services", myContainer, jerseyServletParams, null);
    }
    catch (Exception e)
    {
        LOG.error("Exception occurred registering servlet: ", e);
    }
}

private void registerDummyResource()
{
    final Resource.Builder resourceBuilder = Resource.builder();
    resourceBuilder.path("/hello2");

    final ResourceMethod.Builder methodBuilder = resourceBuilder.addMethod("GET");
    methodBuilder
            .produces(MediaType.TEXT_PLAIN_TYPE)
            .handledBy(new Inflector<ContainerRequestContext, String>()
            {
                @Override
                public String apply(ContainerRequestContext containerRequestContext)
                {
                    return "Hello World!";
                }
            });

    registerResources(resourceBuilder.build());
}

我也在下面嘗試過並得到以下錯誤:

@Activate
public void activate(BundleContext bctx)
{
    registerServlet(bctx);
    registerDummyResource();
    packages("com.fctest.restful.hello.provider");
    register(MyDummyProvider.class);
    myContainer.reload(this);
}

2017-06-01 17:03:45,025 | 警告| raf-3.0.7 / deploy | 供應商
| 75 - org.glassfish.jersey.core.jersey-common - 2.17.0 | 在SERVER運行時中注冊的提供程序com.fctest.restful.hello.provider.MyDummyProvider未實現適用於SERVER運行時的任何提供程序接口。 由於約束配置問題,將忽略提供程序com.fctest.restful.hello.provider.MyDummyProvider。

在我的Spring-Boot應用程序中,我面臨類似的警告,解決方案是不注冊object而是object.getClass()

在你的情況下,我會替換

registerResources(resourceBuilder.build());

register(resourceBuilder.build().getClass());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM