Java Jax-RS未向@provider注释注册资源

Java Jax-RS未向@provider注释注册资源,java,rest,jersey,weblogic,jax-rs,Java,Rest,Jersey,Weblogic,Jax Rs,我有一个使用jersey api在weblogic 12c中运行的rest应用程序。我有一个带有注释@provider的http请求筛选器类。但是,在部署应用程序时,筛选器类不会注册到我在ApplicationConfig类中添加的其他资源类中。随后,我无法过滤http请求。下面是我的日志和代码 Sep 01, 2015 11:16:12 AM weblogic.jaxrs.server.portable.servlet.JerseyServletContainerInitializer onS

我有一个使用jersey api在weblogic 12c中运行的rest应用程序。我有一个带有注释@provider的http请求筛选器类。但是,在部署应用程序时,筛选器类不会注册到我在ApplicationConfig类中添加的其他资源类中。随后,我无法过滤http请求。下面是我的日志和代码

Sep 01, 2015 11:16:12 AM weblogic.jaxrs.server.portable.servlet.JerseyServletContainerInitializer onStartup
INFO: Number of JAX-RS specific classes to be examined:24
Sep 01, 2015 11:16:12 AM weblogic.jaxrs.server.portable.servlet.BaseServletContainerInitializer addServletWithApplication
INFO: Registering the Jersey servlet application, named com.ws.rest.ApplicationConfig, at the servlet mapping, /rest/*, with the Application class of the same name
Sep 01, 2015 11:16:12 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.18.1 02/19/2014 03:28 AM'
Sep 01, 2015 11:16:12 AM com.sun.jersey.server.impl.application.DeferredResourceConfig$ApplicationHolder <init>
INFO: Instantiated the Application class com.ws.rest.ApplicationConfig
Sep 01, 2015 11:16:14 AM weblogic.jaxrs.onwls.deploy.ejb.provider.EJBComponentProviderFactory getComponentProvider
INFO: Binding the EJB class com.ws.rest.UserController to EJBManagedComponentProvider
Sep 01, 2015 11:16:14 AM weblogic.jaxrs.onwls.deploy.ejb.provider.EJBComponentProviderFactory getComponentProvider
INFO: Binding the EJB class com.ws.rest.ReportsController to EJBManagedComponentProvider
Sep 01, 2015 11:16:14 AM weblogic.jaxrs.onwls.deploy.ejb.provider.EJBComponentProviderFactory getComponentProvider
INFO: Binding the EJB class com.ws.rest.MainController to EJBManagedComponentProvider
Sep 01, 2015 11:16:14 AM weblogic.jaxrs.onwls.deploy.ejb.provider.EJBComponentProviderFactory getComponentProvider
INFO: Binding the EJB class com.ws.rest.BusinessController to EJBManagedComponentProvider
Sep 01, 2015 11:16:14 AM com.sun.jersey.spi.inject.Errors processErrorMessages
WARNING: The following warnings have been detected with resource and/or provider classes:
  WARNING: A HTTP GET method, public void com.ws.rest.BusinessController.resetCalls(), MUST return a non-void type.
<Sep 1, 2015 11:16:14 AM EAT> <Warning> <com.sun.jersey.spi.inject.Errors> <BEA-000000> <The following warnings have been detected with resource and/or provider classes:
  WARNING: A HTTP GET method, public void com.ws.rest.BusinessController.resetCalls(), MUST return a non-void type.> 
<Sep 1, 2015 11:16:14 AM EAT> <Notice> <Log Management> <BEA-170027> <The server has successfully established a connection with the Domain level Diagnostic Service.> 
<Sep 1, 2015 11:16:14 AM EAT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to ADMIN.> 
<Sep 1, 2015 11:16:14 AM EAT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.>

当我调用我的URL时,日志文件显示没有写入任何内容。如何注册这样的类?

我部署了一个共享库 然后在我的weblogic.xml中引用它

<library-ref>
  <library-name>jax-rs</library-name>
  <specification-version>2.0</specification-version>
</library-ref>

jax-rs
2

过滤器被注册了。然而,这打乱了我所有的JavaEE注释,所有从EJB调用获取数据的URL都被破坏。

有两种方法。但是,您描述的过滤器必须工作,请尝试将过滤器放在类列表的第一位

@Override
public Set<Class<?>> getClasses() {
    Set<Class<?>> s = new HashSet<Class<?>>();
    s.add(ReqFilter.class);
    s.add(MainController.class);
    s.add(UserController.class);
    s.add(BusinessController.class);
    s.add(ReportsController.class);
    return s;
}
@覆盖

public Set>s=new hashset您是否尝试将其注册为singleton?另外,对于Jersey,扩展
ResourceConfig
比扩展
应用程序更为常见。根据我的经验,extends
ResourceConfig
除了更易于配置应用程序外,还可以更好地工作。您是否使用web.xml?你试过com.sun.jersey.spi.container.ContainerRequestFilter而不是javax.ws.rs.container.ContainerRequestFilter了吗实际上我注意到了另一件事。服务器似乎正在使用Jersey 1.x。您可以通过
com.sun.jersey…
日志消息来判断。Jersey 2.x将是
org.glassfish.Jersey…
。您需要删除与Jersey 2.x/jax-rs 2.0相关的任何内容,这样您就不会对使用什么感到困惑。这样做之后,您的过滤器将不会编译,因为它是一个Jax rs 2.0类。Jersey 1.x确实有一个同名的过滤器,只是包不同,契约也有点不同,最后通过这个链接为jax rs 2.0和Jersey 2.19部署了一个共享库。现在过滤器已注册,但其他类未注册,当我尝试调用这些资源时,会出现nullpointer异常。然而,这只发生在那些调用EJB的URL上。不需要数据库数据的URL返回的响应非常完美。什么会影响我的ejb绑定?您找到了避免URL问题的解决方案吗?
<library-ref>
  <library-name>jax-rs</library-name>
  <specification-version>2.0</specification-version>
</library-ref>
@Override
public Set<Class<?>> getClasses() {
    Set<Class<?>> s = new HashSet<Class<?>>();
    s.add(ReqFilter.class);
    s.add(MainController.class);
    s.add(UserController.class);
    s.add(BusinessController.class);
    s.add(ReportsController.class);
    return s;
}