Java 提供商未向Jersey 2.8注册

Java 提供商未向Jersey 2.8注册,java,spring,jersey,provider,Java,Spring,Jersey,Provider,我有一个Jersey 1.x应用程序,正在迁移到Jersey 2.8。My.WAR依赖于包含@Provider和@Component注释类的.JAR文件 package com.usamp.core.ui.model.utility; @Component @Provider public class UIModelObjectMapperProvider implements ContextResolver<ObjectMapper> { private final st

我有一个Jersey 1.x应用程序,正在迁移到Jersey 2.8。My.WAR依赖于包含@Provider和@Component注释类的.JAR文件

package com.usamp.core.ui.model.utility;

@Component
@Provider
public class UIModelObjectMapperProvider implements ContextResolver<ObjectMapper> {
    private final static Logger LOG = LoggerFactory.getLogger(UIModelObjectMapperProvider.class);

    private ObjectMapper
        uiModelObjectMapper;

    @Override
    public ObjectMapper getContext(final Class<?> type) {
        return
            Model.class.isAssignableFrom(type)
                ? uiModelObjectMapper
                : null;
    }

    public UIModelObjectMapperProvider() {
        LOG.debug("UIModelObjectMapperProvider Constructed");
    }

    public ObjectMapper getUiModelObjectMapper() {
        return uiModelObjectMapper;
    }

    @Resource
    public void setUiModelObjectMapper(final ObjectMapper uiModelObjectMapper) {
        this.uiModelObjectMapper = uiModelObjectMapper;
    }
}
如您所见,这个类只是扩展了来自.JAR依赖项的类

当服务器启动时,我看到的是:

  • Spring创建一个bean来表示UIModelObjectMapperProvider,并调用适当的setter来配置依赖项
  • Spring创建一个bean来表示UIMapperProvider,并调用适当的setter来配置依赖项
  • Jersey为UIMapperProvider创建新对象,并且未设置依赖项
  • 看来Spring正在做它的事情,然而,Jersey是:

  • 在dependent.JAR中没有看到@Provider(没有在JAR之间扫描包?)
  • 当使用.WAR找到@Provider时,将创建一个新对象,并且不会使用Spring的bean
  • 我正在使用它在web.xml中配置我的应用程序:

    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.usamp.biddingtool.utilities.BiddingToolConfig</param-value>
    </init-param>
    
    我还使用了jersey-spring3依赖项:

    <dependency>
        <groupId>org.glassfish.jersey.ext</groupId>
        <artifactId>jersey-spring3</artifactId>
        <version>2.8</version>
    </dependency>
    
    因此,似乎在一个单独的JAR中找不到@Providers,当找到它们时,Spring没有被利用

    暂时,我在.WAR中创建了一个新的@Provider类,并实现它以将调用转发到Spring的bean:

    @Provider
    public class UIMapperProvider implements ContextResolver<ObjectMapper> {
        @Override
        public ObjectMapper getContext(final Class<?> type) {
            return
                ApplicationContextProvider
                    .getApplicationContext()
                    .getBean(UIModelObjectMapperProvider.class)
                    .getContext(type);
        }
    }
    
    @Provider
    公共类UIMapperProvider实现ContextResolver{
    @凌驾
    公共对象映射器getContext(最终类类型){
    返回
    ApplicationContextProvider
    .getApplicationContext()
    .getBean(UIModelObjectMapperProvider.class)
    .getContext(类型);
    }
    }
    
    但我不应该这样做

    知道我错过了什么吗

    谢谢。 -美联社_

    public class BiddingToolConfig extends ResourceConfig {
    
        public BiddingToolConfig() {
            register(MultiPartFeature.class);
            register(UIModelObjectMapperProvider.class);
        }
    }
    
    <dependency>
        <groupId>org.glassfish.jersey.ext</groupId>
        <artifactId>jersey-spring3</artifactId>
        <version>2.8</version>
    </dependency>
    
    @Path("bid)
    @Component
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public class BidAPI {
    
        @Resource
        private BidService
            bidService;
    
        @Resource
        private SFBidMappingService
            sfBidMappingService;
    
    @Provider
    public class UIMapperProvider implements ContextResolver<ObjectMapper> {
        @Override
        public ObjectMapper getContext(final Class<?> type) {
            return
                ApplicationContextProvider
                    .getApplicationContext()
                    .getBean(UIModelObjectMapperProvider.class)
                    .getContext(type);
        }
    }