相关疑难解决方法(0)

java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer

我正在尝试使用Jersey + Google应用引擎构建一个简单的hello world应用程序两天.对于简单的AppEngine项目,我遵循了这些教程,两者都很好用 https://developers.google.com/appengine/docs/java/gettingstarted/creating https://developers.google.com/appengine/docs/java/webtoolsplatform

但现在我正在尝试添加Jersey并遵循本教程http://www.vogella.com/articles/REST/article.html.

但服务器一直在给我

java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer

当我在web.xml中添加这些行时:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>TestServer</display-name>
<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.test.myproject</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

我已经JAX-RS 2.1 RI bundle这里下载了Jersey ,并且已经WEB-INF/lib在教程中添加了所有jar文件.即使两天后也没有任何效果.我已经在Google上搜索了几次,显然使用Maven的人已经解决了它,但我没有使用Maven也没有写过那个教程的人.

只是为了检查是否com.sun.jersey.spi.container.servlet.ServletContainer存在于导入中 Jersey jars我试图在Java中编写这个完全限定的名称并让intellisense完成名称,但我无法获得任何智能感知,com.sun.je所以我的最后猜测是在最新的Jersey构建中有一些包重新排列并且jersey不再在里面com.sun.我很累,我很感激任何帮助.

eclipse google-app-engine jersey java-ee jersey-2.0

81
推荐指数
4
解决办法
23万
查看次数

Jersey ContainerRequestFilter未触发

我正在尝试使用a ContainerRequestFilter在基于Tomcat的Jersey应用程序上强制执行某些身份验证.我按照这个文件.问题:永远不会触发过滤器

过滤类:

@Provider
public class AuthFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext)
        throws IOException {

        // MY AUTHENTICATION CODE GOES HERE

    }
Run Code Online (Sandbox Code Playgroud)

web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="debate-rest"
    version="3.0">
  <display-name>rest</display-name>
   <servlet>  
    <servlet-name>Jersey REST Service</servlet-name>  
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>  
    <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
        <param-value>com.hck.debate.rest.security.AuthFilter</param-value>
    </init-param>
    <init-param>  
      <param-name>jersey.config.server.provider.packages</param-name>  
      <param-value>com.hck.debate.rest.controller</param-value>  
    </init-param>  
    <init-param>  
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>  
        <param-value>true</param-value>  
    </init-param>      
    <load-on-startup>1</load-on-startup>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>Jersey REST Service</servlet-name>  
    <url-pattern>/*</url-pattern>  
  </servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

jersey jersey-2.0

38
推荐指数
3
解决办法
4万
查看次数

使用Jersey的AbstractHttpContextInjectable自定义方法注释不工作

如果以非安全的方式访问某些方法,我想限制它们.我正在创建一个@Secure注释,用于检查请求是否是通过安全通道发送的.但是,我无法创建捕获请求的HttpContext的方法injectable.

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Secure {

}

public class SecureProvider<T> implements InjectableProvider<Secure, AbstractResourceMethod> {
    @Override
    public ComponentScope getScope() {
        return ComponentScope.PerRequest;
    }

    @Override
    public Injectable<?> getInjectable(ComponentContext componentContext,
                                       Secure annotation,
                                       AbstractResourceMethod method) {
        return new SecureInjectable();
    }
}

public class SecureInjectable<T> extends AbstractHttpContextInjectable<T> {
    @Override
    public T getValue(HttpContext context) {    
        // validation here

        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Dropwizard框架,因此提供程序的初始化应该像以下一样简单:

environment.addProvider(new SessionRestrictedToProvider<>(new SessionAuthenticator(), "MySession"));
environment.addProvider(new SecureProvider<>());
environment.setSessionHandler(new SessionHandler());
Run Code Online (Sandbox Code Playgroud)

用法:

@Resource
@Path("/account")
public class AccountResource {
    @GET
    @Path("/test_secure")
    @Secure
    public Response isSecure() …
Run Code Online (Sandbox Code Playgroud)

java annotations jersey dropwizard

7
推荐指数
2
解决办法
1万
查看次数