标签: jersey-2.0

宁静的网络服务与球衣2.0没有maven

任何人都可以通过不使用maven告诉我如何使用Jersey 2.0制作一个宁静的Web服务.我到处搜索并找到Jersey1.x版本的教程,但不是2.0.请帮忙

rest web-services jersey jersey-client jersey-2.0

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

根据表单数据过滤泽西请求

在Jersey 1.x中,您可以使用ContainerRequest.getFormParameters()对表单数据执行请求筛选,但我没有在Jersey 2.x中看到明显的等效项.我已经实现了ContainerRequestFilter界面,让我可以访问a ContainerRequestContext,但从那里如何获取表单数据?

泽西岛1.x例子:

public class MyFilter implements ContainerRequestFilter {
  public ContainerRequest filter(ContainerRequest request) {
    Form f = request.getFormParameters();

    // examine form data and filter as needed
  }
}
Run Code Online (Sandbox Code Playgroud)

泽西岛2.x例子:

public class MyFilter implements ContainerRequestFilter {
  public void filter(ContainerRequestContext context) {
    // how do I get to the Form data now?
  }
}
Run Code Online (Sandbox Code Playgroud)

jersey jersey-2.0

11
推荐指数
1
解决办法
7810
查看次数

AsyncResponse ConnectionCallback不会在Jersey中触发

对于异步编程,Jersey(JAX-RS)提供了一个ConnectionCallback在连接断开时执行的回调.来自泽西岛的文档:

由于某些异步请求可能需要很长时间来处理,因此客户端可能决定在恢复响应之前或者在完全写入客户端之前终止其与服务器的连接.为了处理这些用例,可以使用ConnectionCallback.只有在将响应写入后端客户端时,连接过早终止或丢失,才会执行此回调.请注意,成功写入响应并按预期关闭客户端连接时,不会调用此回调.

听起来不错,但我永远无法解决这个问题.

这是一些代码:

@GET
@Produces(MediaType.TEXT_PLAIN)
@ManagedAsync
@Path("/poll")
public void poll(@Suspended final AsyncResponse asyncResponse) {
    asyncResponse.register(new CompletionCallback() {
        @Override
        public void onComplete(Throwable throwable) {
            logger.info("onComplete called.");
        }
    });

    asyncResponse.register(new ConnectionCallback() {
        @Override
        public void onDisconnect(AsyncResponse disconnected) {
            logger.info("onDisconnect called.");
        }
    });

    asyncResponse.setTimeout(POLL_TIMEOUT_SECONDS, TimeUnit.SECONDS);
    asyncResponse.setTimeoutHandler(new TimeoutHandler() {
        @Override
        public void handleTimeout(AsyncResponse asyncResponse) {
            logger.info("handleTimeout called.");
            asyncResponse.resume(Response.status(Response.Status.OK).entity("TIMEOUT").build());
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

显示的另外两个回调,CompletionCallback和TimeoutHandler,可以正常启动,但不会失败.如果达到指定的超时持续时间,则会触发TimeoutHandler.如果恢复AsyncResponse实例,则会触发CompletionCallback.

但是,使用ConnectionCallback,我可以关闭,终止或以其他方式停止连接到上面显示的Web服务的客户端,并且ConnectionCallback永远不会被触发.

我错过了什么吗?ConnectionCallback是否在泽西实施?(它在JAX-RS规范中是可选的,但Jersey文档谈论它就好像已经实现了.)

任何输入将不胜感激.

java asynchronous web-services jersey jersey-2.0

11
推荐指数
1
解决办法
1740
查看次数

如何获取javax.ws.rs.core.UriInfo的实例

是否有任何实现javax.ws.rs.core.UriInfo可用于快速创建实例以进行测试.这个界面很长,我只需要测试一下.我不想在这个界面的整个实现上浪费时间.

更新:我想为类似于此的函数编写单元测试:

@GET
@Path("/my_path")
@Produces(MediaType.TEXT_XML)
public String webserviceRequest(@Context UriInfo uriInfo);
Run Code Online (Sandbox Code Playgroud)

java unit-testing jax-rs grizzly jersey-2.0

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

Jersey 2.x具有属性的自定义注入注释

我正在从DropWizard 0.7.1迁移到0.8.1.这包括从Jersey 1.x迁移到2.x. 在我使用Jersey 1.18.1的实现中,我实现了MyProvider(为简单起见改变了所有类名)InjectableProvider.该类将创建MyInjectable包含自定义注入注释的对象MyToken.MyToken包含传递和读取的各种属性MyInjectable.最后,在Application类中我注册了一个新的实例MyProvider,如下所示.

我做了一些研究,似乎无法解决我在泽西岛2.x中如何重新创建(或替代,我认为)这样一个场景.

这是当前的1.18.1实现:

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ ElementType.PARAMETER, ElementType.FIELD })
    public @interface MyToken {

        // Custom annotation containing various attributes
        boolean someAttribute() default true;
        // ...
    }

    public class MyProvider implements InjectableProvider<MyToken, Parameter> {

        // io.dropwizard.auth.Authenticator
        private final Authenticator<String, MyObject> authenticator;

        public MyProvider(Authenticator<String, MyObject> authenticator) {
            this.authenticator = authenticator;
        }

        @Override
        public ComponentScope getScope() {
            return ComponentScope.PerRequest;
        }

        @Override
        public Injectable<?> getInjectable(ComponentContext …
Run Code Online (Sandbox Code Playgroud)

java jersey dropwizard jersey-2.0 hk2

11
推荐指数
1
解决办法
9706
查看次数

POST到Jersey REST服务获取错误415不支持的媒体类型

我正在使用Jersey和Tomcat的JAX-RS Web应用程序.获取请求很好但是当我尝试发布JSON时,我得到HTTP状态415 - 不支持的媒体类型.

这是我的简单HelloWorld.java:

package service;

import javax.ws.rs.*;

@Path("hello")
public class HelloWorld {
    @GET
    @Produces("text/plain")
    public String get() {
        return "hello world";
    }

    @POST
    @Consumes("application/json")
    public String post(JS input) {
        return input.hello;
    }

    public static class JS {
        public String hello;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在Postman中尝试的请求(带有'application/json'标题):

在此输入图像描述 这是包含库的项目布局: 在此输入图像描述

我在用:

  • Java 7 x64
  • 泽西岛2.17
  • Tomcat 7.0.62 x64

谢谢!

java rest json jersey jersey-2.0

11
推荐指数
1
解决办法
3万
查看次数

带有附加Cookie的Server Sent Event Client

我正在尝试使用额外的cookie对Server Sent Event资源进行单元测试.我已经在为客户端使用Jersey作为EventSource和JavaX.以下代码工作正常:

    WebTarget target = ClientBuilder.newBuilder()
        .register(SseFeature.class)
        .build()
        .target("http://localhost:8080/sse");
    EventSource eventSource = EventSource.target(target).build();
    EventListener listener = new EventListener() {
        @Override
        public void onEvent(InboundEvent inboundEvent) {
            LOG.info(inboundEvent.readData(String.class));
        }
    };
    eventSource.register(listener);
    eventSource.open();
    serverEventManager.send("/sse", "foo");
    eventSource.close();
Run Code Online (Sandbox Code Playgroud)

Hoewever,对于额外的单元测试,我需要在请求中添加额外的cookie.我已经尝试了以下内容

target.(...).request.cookie("foo", "bar");
Run Code Online (Sandbox Code Playgroud)

但是这会返回一个构建器,我无法从中为EventSource创建所需的WebTarget.

java cookies junit server-sent-events jersey-2.0

11
推荐指数
1
解决办法
1699
查看次数

Jersey 2.6 REST服务升级到Java 8 tomcat 8异常:java.lang.NoSuchMethodError:javax.validation.Configuration.getBootstrapConfiguration

我们有一场战争,通过基于hibernate-4.2.7验证的验证(实现validation-api-1.0.0.GA),在场地2.6上展示休息服务.

在我们升级到java 8和tc-server 3.1.X之前,一切正常.
升级到java 8之后,看起来在验证API中出现了问题.
我们得到了

java.lang.NoSuchMethodError:javax.validation.Configuration.getBootstrapConfiguration()Ljavax/validation/BootstrapConfiguration;

当我们从客户端发送休息请求时.
最奇怪的是,这种行为并不构成
当我从依赖项添加或删除jar时,它有时会起作用,有时候不起作用.

我们得到以下例外

SEVERE [tomcat-http--1] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [jerseyServlet] in context with path [/Analyzer] threw exception [A MultiException has 1 exceptions.  They are:
1. java.lang.NoSuchMethodError: javax.validation.Configuration.getBootstrapConfiguration()Ljavax/validation/BootstrapConfiguration;
] with root cause
 java.lang.NoSuchMethodError: javax.validation.Configuration.getBootstrapConfiguration()Ljavax/validation/BootstrapConfiguration;
    at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.getTraversableResolver(ValidationBinder.java:287)
    at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.getDefaultValidatorContext(ValidationBinder.java:268)
    at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.getDefaultValidator(ValidationBinder.java:248)
    at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.provide(ValidationBinder.java:199)
    at org.glassfish.jersey.server.validation.internal.ValidationBinder$ConfiguredValidatorProvider.provide(ValidationBinder.java:173)
    at org.jvnet.hk2.internal.FactoryCreator.create(FactoryCreator.java:96)
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:456)
    at org.jvnet.hk2.internal.PerLookupContext.findOrCreate(PerLookupContext.java:69)
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2445)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:621)
    at org.jvnet.hk2.internal.IterableProviderImpl.get(IterableProviderImpl.java:107)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:135)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$VoidOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:136)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:406)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:350)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:106)
    at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:259)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) …
Run Code Online (Sandbox Code Playgroud)

validation jersey java-8 jersey-2.0 hk2

11
推荐指数
1
解决办法
2534
查看次数

已在未在活动泽西错误范围中运行的代码中检测到HK2故障

目前我正在开发基于运动衫的RESTful应用程序,并希望在我的资源中使用DPI.(注意:jersey的版本是2.23.1,servlet容器是tomcat 8.5.3.)

因此,我遵循了球衣文档中的第23章自定义注入和生命周期管理教程,并创建了一个资源,一个工厂,并将工厂绑定到这样的类:

资源:

@Path("/{project}/catalogs")
public class ProjectsResource {

   @Inject
   Project project;

   ...
}
Run Code Online (Sandbox Code Playgroud)

厂:

public class ProjectFactory extends Factory<Project> {

  private final Cache cache = cache.getInstance();

  @PathParam("project")
  private String project;

  private HttpServletRequest request;

  @Inject
  public ProjectFactory(HttpServletRequest request) {
    this.request = request;
  }

  @Override
  public Project provide() {
    return cache.get(project, Project.class);
  }

  @Override
  public void dispose(Project instance) {}

}
Run Code Online (Sandbox Code Playgroud)

我还有一个功能,它注册一个AbstractBinder,它将我的ProjectFactory绑定到我的Project类.

@Provider
public class ProjectFeature implements Feature {

  @Override
  public boolean configure(FeatureContext context) {

    context.register(new AbstractBinder() {
      @Override
      protected …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection jersey jersey-2.0 hk2

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

11
推荐指数
1
解决办法
1072
查看次数