Tag: jersey

Jersey Rest Service的ResourceConfig和ServletContextListener之间的区别

我想初始化Jersey Rest服务并引入一个全局应用程序范围的变量,该变量应该在应用程序启动时计算,并且应该在每个rest资源和每个方法中可用(此处由整数globalAppValue = 17表示,但将是一个复杂的对象后来)。 为了初始化服务并在启动时计算一次值,我发现了两种做法:一般的ServletContextListener和Jersey ResourceConfig方法。 但我还没明白两者之间有什么区别? 两种方法在启动时触发(两者都打印System.out-messages)。 这是我的ServletContextListener的实现,它工作正常: public class LoadConfigurationListener implements ServletContextListener { private int globalAppValue = 17; @Override public void contextDestroyed (ServletContextEvent event) { } @Override public void contextInitialized (ServletContextEvent event) { System.out.println (“ServletContext init.”); ServletContext context = event.getServletContext (); context.setAttribute (“globalAppValue”, globalAppValue); } } 这是Jersey Rest ResourceConfig方法的实现,其中ServletContext不可用。 以后,通过使用资源方法注入,此Application对象也不可用: @ApplicationPath(“Resources”) public class […]

Jersey:将值从ContainerRequestFilter传递到端点

我使用的是Jersey 2.9,我创建了一个filter,它将获取一个加密的标头值,然后将其解密,然后将其传递给被调用的端点。 我不知道如何做到这一点,我一直在网上搜索,但没有真正找到我想做的具体例子。 调用filter,我只是将值从它传递到端点时出现问题。 你能帮助我吗! 以下是一些示例代码: public class MyFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) throws WebApplicationException { String EncryptedString = requestContext.getHeaderString(“Authentication”); /* Doing some methods to remove encryption */ /* Get a string which I want to pass to the endpoint which was called on, in this example: localhost:4883/rest/test */ } } […]

如何将REST请求转发到另一个资源?

在我目前的架构中,我有一个JAX-RS资源,它位于后面: /categories /categories/{catId} 这是这样实现的: @Path(“/categories”) @Produces(“application/json”) public class CategoryResourcesApi { @GET public Response getCategories() { // … } @GET @Path(“/{catId}”) public Response getCategory(@PathParam(“catId”) String catId) { // … } // … } 和另一个服务: /products /products/{prodId} 并有类似的实现: @Path(“/products”) @Produces(“application/json”) public class ProductResourcesApi { @GET public Response getProducts() { // … } // … } 除了这些直截了当的路径,我还需要服务于这些: /categories/{catId}/products […]

Jersey错误JAXBStringReaderProviders $ RootElementProvider

17-53-2014 12:53:31.817 INFO – 将com.citronium.fizionomizm.service.server.controllers.Root注册为根资源类17-53-2014 12:53:31.820 INFO – 注册com.citronium.fizionomizm。 service.server.controllers.RecognizePath as root resource class 17-53-2014 12:53:31.822 INFO – 启动Jersey应用程序,版本’Jersey:1.18 11/22/2013 03:05 AM’17-53-2014 12: 53:31.929错误 – 无法实例化提供程序类com.sun.jersey.server.impl.model.parameter.multivalued.JAXBStringReaderProviders $ RootElementProvider。 处理将继续,但不会使用该类java.lang.IllegalArgumentException:参数类型不匹配sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)〜[na:1.7.0_51] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl。 java:57)〜[na:1.7.0_51] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)〜[na:1.7.0_51] at java.lang.reflect.Constructor.newInstance(Constructor.java: 526)〜[na:1.7.0_51] at com.sun.jersey.core.spi.component.ComponentConstructor。 getInstance(ComponentConstructor.java:210)~ [fizionomizm-service.jar:0.1] at com.sun.jersey.core.spi.component.ComponentConstructor.getInstance(ComponentConstructor.java:180)~ [fizionomizm-service.jar:0.1 ]在com.sun.jersey.core.spi.component.ProviderFactory。 _getComponentProvider(ProviderFactory.java:166)[fizionomizm-service.jar:0.1] at com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:137)[fizionomizm-service.jar:0.1] at com.sun.jersey.core.spi.component.ProviderServices.getComponent(ProviderServices.java:283)[fizionomizm-service.jar:0.1] at com.sun.jersey.core.spi.component.ProviderServices.getProvidersAndServices(ProviderServices。 java:176)[fizionomizm-service.jar:0.1] at com.sun.jersey.server.impl.model.parameter.multivalued.StringReaderFactory.init(StringReaderFactory.java:60)[fizionomizm-service.jar:0.1] […]

dependency injectionResourceFilter不起作用?

我有一堆JAX-RS资源,为新的WebService提供API。 为了理解发生了什么,我想将有关每个请求的信息存储在数据仓库中。 在我看来,这是一个跨领域关注的完美例子,可以由ResourceFilter实现,对吗? 所以我构建了一个DataWarehouseService ,它应该在DB中存储东西: @Stateless @LocalBean public class DataWarehouseService { public void logApiCall(ContainerRequest cr) { // get interesting fields from request, store in DB … } } 这是我的filter: public class LoggingResourceFilter implements ResourceFilter { Logger log = Logger.getLogger(this.getClass().getName()); @EJB DataWarehouseService dwh; @Override public ContainerRequestFilter getRequestFilter() { return new ContainerRequestFilter() { @Override public ContainerRequest filter(ContainerRequest […]

maven jersey-multipart缺少对javax.ws.rs.core.Response的依赖

我似乎缺少依赖但无法找到解决方案……我已确保所有jersey版本都与此处的答案相同。 错误: SEVERE: The following errors and warnings have been detected with resource and/or provider classes: SEVERE: Missing dependency for method public abstract javax.ws.rs.core.Response com.service.copy(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 0 使用的依赖关系: com.sun.jersey jersey-servlet 1.17 com.sun.jersey.contribs jersey-multipart 1.17 com.sun.jersey jersey-json 1.17 com.sun.jersey jersey-bundle 1.17 org.jvnet mimepull 1.6 发生错误的代码: @POST @Path(“copy”) public Response copy(@FormDataParam(“file”) InputStream uploadedInputStream, @FormDataParam(“file”) […]

使用泽西客户端连接池

我是泽西岛的新手,我做了一次搜索,但无法弄清楚是否有一种方法可以让泽西客户端使用连接池而不是每次我们发送新请求时都创建连接。 整个想法是重用池中的连接集,这将节省批量或资源。 仅供参考我不是在寻找连接:保持活力 。 这就是我现在正在做的事情 public void postData() { Client client = new Client(); WebResource webResource = client.resource(“http://SomeService.com/..”); ClientResponse response = webResource.accept(“text/plain”).get(ClientResponse.class); System.out.println(response.getStatus()); System.out.println(response.getEntity(String.class)); } 任何帮助都非常值得注意,期待代码片段。 提前致谢。

尝试向Jersey注入自定义上下文时缺少字段依赖项

我有一个自定义上下文: public class MyContext { public String doSomething() {…} } 我创建了一个上下文解析器: @Provider public class MyContextResolver implements ContextResolver { public MyContext getContext(Class type) { return new MyContext(); } } 现在在资源中我尝试注入它: @Path(“/”) public class MyResource { @Context MyContext context; } 我收到以下错误: SEVERE: Missing dependency for field: com.something.MyContext com.something.MyResource.context 相同的代码在Apache Wink 1.1.3中运行良好,但在Jersey 1.10中失败。 任何想法将不胜感激。

为什么没有为Jersey控制器检测到我的Aspect(使用自定义注释)?

我想在Jersey控制器上创建一个Aspect来衡量服务执行的时间。 我正在与我的切入点作斗争,因为它没有被检测到,我的方面永远不会被启动。 我尝试过使用大量的切入点,例如: execution(@Monitor * *.*(..)) execution(public * *(..)) change the order of @Aspect and @Component Added a pointcut like this: @Pointcut(“execution(@Monitor * *.*(..))”) public void monitorRequestTargets(){} @Around(“monitorRequestTargets()”) Tried using AOP and CGLIB Also tried changing the order of configuration in context.xml Eclipse检测到我的方法正在建议我的方法,但它不会在运行时执行。 你能否给我一些提示,说明为什么没有创建方面或切入点没有启动? 我的代码如下。 的context.xml 我的MonitorAspect @Component @Aspect public class MonitorAspect { private static […]

如何使用log4j查看Jersey

我是log4j的新手,我正在尝试使用它来更好地理解为什么我的资源提供了415 Media Type Not Supported标头。 我正在使用以下内容: log4j.rootCategory=WARN, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c:%L – %m%n log4j.category.com.sun.jersey=DEBUG,stdout 这似乎应该可以工作,但我在控制台中没有显示有关POST到达此应用程序的任何内容。 我知道它正在到达应用程序,因为如果我关闭应用程序,POSTer会在尝试POST时抛出“连接被拒绝”。