【问题标题】:Jersey Provider is not getting Context programmaticallyJersey Provider 没有以编程方式获取上下文
【发布时间】:2017-06-01 10:20:47
【问题描述】:

我以编程方式在泽西岛启动了 REST Web 服务,我需要它来包装对 2PP 提供者的调用以用于 AuthN/AuthZ 目的。问题是 2PP 提供者无法解析 @Context。我在下面提供了正在执行的代码的示例 sn-p。

需要集成的提供者

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.
}

我的网络服务代码

@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/部署 |供应商
| 75 - org.glassfish.jersey.core.jersey-common - 2.17.0 |提供者 com.fctest.restful.hello.provider.MyDummyProvider 在 SERVER 中注册 运行时不实现任何适用于 服务器运行时。由于约束配置问题,提供者 com.fctest.restful.hello.provider.MyDummyProvider 将被忽略。

【问题讨论】:

    标签: java web-services jersey jax-rs


    【解决方案1】:

    在我的 Spring-Boot 应用程序中,我遇到了类似的警告,解决方案是不注册 object,而是注册 object.getClass()

    在你的情况下,我会替换

    registerResources(resourceBuilder.build());
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 2023-04-09
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多