Tag: jersey 2.0

如何干净地覆盖Jersey使用的默认ServiceLocator?

我正在开发一个应用程序,它使用Jersey(2.5)作为其REST前端,Jetty作为嵌入式HTTP(S)服务器,两者都采用所谓的“嵌入式”方式,例如。 不依靠制作.war并部署它,而是通过处理程序,资源,注入的程序化配置…… 我想以某种方式覆盖Jersey在服务器端使用的HK2 ServiceLocator ,或者可能为父服务定位器提供一个父服务器来解析在应用程序的REST部分之外定义的依赖关系。 从我看到的代码来看,这似乎不可能:ServiceLocator通过调用Injections在ApplicationHandler实例化: if (customBinder == null) { this.locator = Injections.createLocator(new ServerBinder(application.getProperties()), new ApplicationBinder()); } else { this.locator = Injections.createLocator(new ServerBinder(application.getProperties()), new ApplicationBinder(), customBinder); } 注射中的代码告诉我以下内容: public static ServiceLocator createLocator(Binder… binders) { return _createLocator(null, null, binders); } 这意味着新创建的服务定位器具有一些任意生成的名称,并且没有父项。 有没有(干净的)方法来改变这种行为,以便我注入我自己的ServiceLocator作为应用程序的父级?

如何在泽西岛列出所有已注册的JAX-RS实体提供商

让我们假设我有一个简单的泽西应用程序, 在github上嵌入了jetty Demo项目,下面是基本代码。 回到jersey1的日子,我有日志消息: мая 07, 2016 5:05:50 AM com.sun.jersey.api.core.PackagesResourceConfig init INFO: Scanning for root resource and provider classes in the packages: ru.varren мая 07, 2016 5:05:50 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses INFO: Root resource classes found: class ru.varren.MyResource мая 07, 2016 5:05:50 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses INFO: Provider classes found: class ru.varren.JsonProvider мая 07, 2016 5:05:50 AM […]

在Osgi中以编程方式注册ServletContainer

我正在开发一个带有OSGI的JAX-RS应用程序,其中资源是动态加载的。 为此,我需要以编程方式注册ServletContainer,然后我可以调用方法ServletContainer.reload(ResourceConfig)。 我正在运行OSGI环境,支持servlet 3.x,使用PAX-WEB 3.0.2和Jersey 2.4。 问题是当我想访问实现Server Sent Event的资源时,Jersey会引发一个不支持异步的错误,因为它在Servlet 2.x中运行。 这里例外: 2013-11-05 00:22:37,675 | WARN | qtp27902282-62 | ServletHandler | pse.jetty.servlet.ServletHandler 492 | 60 – org.eclipse.jetty.aggregate.jetty-all-server – 8.1.9.v20130131 | javax.servlet.ServletException: java.lang.UnsupportedOperationException: Asynchronous processing not supported on Servlet 2.x container. at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:373)[224:org.glassfish.jersey.containers.jersey-container-servlet-core:2.3.1] at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:372)[224:org.glassfish.jersey.containers.jersey-container-servlet-core:2.3.1] at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:335)[224:org.glassfish.jersey.containers.jersey-container-servlet-core:2.3.1] at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:218)[224:org.glassfish.jersey.containers.jersey-container-servlet-core:2.3.1] at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669)[60:org.eclipse.jetty.aggregate.jetty-all-server:8.1.9.v20130131] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1448)[60:org.eclipse.jetty.aggregate.jetty-all-server:8.1.9.v20130131] at org.ops4j.pax.web.service.internal.WelcomeFilesFilter.doFilter(WelcomeFilesFilter.java:185)[70:org.ops4j.pax.web.pax-web-runtime:3.0.2] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)[60:org.eclipse.jetty.aggregate.jetty-all-server:8.1.9.v20130131] […]

Marshal / Un marshal使用JAXB在Jersey JAX-RS中列出对象

早上好。 今天早上,当我通过Jersey Entity提供者MessageBodyReader和MessageBodyWriter我遇到了以下问题。 我想编写一个资源方法和客户端,它返回一个自定义对象列表,媒体类型是application/xml 。 所以我想使用JAXB(我是JAXB的新手)。 我能够通过编写自己的扩展MessageBodyReader和MessageBodyWriter来实现这一目标。 但我害怕跟随的方式。 看看我实施的方式: 资源方法: @Path(“productlist/xml”) @GET public RetObjects getProductsXml(){ List pList = new ArrayList(); pList.add(new Product(“1″,”Dell latitude E6000”,2900,500)); pList.add(new Product(“2″,”Xperia Z2″,549,400)); RetObjects obj = new RetObjects(); obj.setObject(pList); return obj; } 我的自定义对象: @Entity @Table (name=”PRODUCT”) @XmlRootElement(name=”product”) public class Product { @Id @Column(name = “CODE”) private String code; … // rest […]

Jersey:找不到类型的合适构造函数:无法从JSON对象实例化

我有一个资源,其方法如下: @PUT @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Path(“/add”) public Response putThing(Thing thing) { try { //Do something with Thing object return Response.status(HttpStatus.SC_OK).build(); } catch (Exception e) { log.error(“Request failed”, e); return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).build(); } } 事情: public class Thing { private final String symbol; private final String name; public Stock(String symbol, String name) { this.symbol = symbol; this.name = […]

使用RxJava / Jersey2的异步RestAPI。 线程问题?

我们正在使用反应式编程对REST API进行原型设计。 如图所示,我们保留3层与我们在上一代同步API设计中使用的相同; http://oi59.tinypic.com/339hhki.jpg 使用Jersey2实现的API层将处理请求/反序列化JSON并切换到服务层。 服务层实现业务逻辑。使用反应式编程实现(RxJava) Dao Layer用于Service Layer的持久化操作。因为我们使用CouchBase,所以这将使用CouchBase RxClient。 根据我的理解,流程如下: a) HTTP请求到来,Jersery将从“容器线程池”处理RequestThread内的请求/解析JSON /反序列化请求模型。 b)使用Jersey2异步支持,RequestThread将返回到Container Thread Pool,服务层将在Schedulers.computation()调度程序中执行。 @Path(“/resource”) public class AsyncUserResource { @GET public void asyncGet(@Suspended final AsyncResponse asyncResponse) { Observable user = userService.getUser(…); //this is executed using Schedulers.computation() inside Service implementation user.subscribe(new Observer() { @Override public void onCompleted() { } @Override public void onError(Throwable […]

GlassFish 4.0 w / Jersey毫无例外地返回500内部服务器错误

我正在使用GlassFish 4.0服务器和服务器端JPA类,我想通过JAX-RS提供。 到目前为止,这对于简单的实体来说效 但是,如果我有一个@OneToMany关系例如并且存在链接实体,则服务器返回500内部服务器错误。 在这种情况下,服务器日志中不会记录任何内容。 为了找到错误,我创建了一个小的自定义JSP页面,以获取有关所发生事件的更多信息。 代码就是这样: Status: Throwable: 不幸的是,输出只是“状态:500 Throwable:null” 我自己的服务器端代码似乎运行正常(做了一些调试输出),但是,出现了一些错误。 在此示例中,除非存在链接的IssueComment实体,否则可以毫无问题地检索User和Issue类: 用户类: package my.application.model; import static javax.persistence.FetchType.LAZY; import java.io.Serializable; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.xml.bind.annotation.XmlRootElement; /** * The persistent class for the User database table. * */ @XmlRootElement @Entity(name=”User”) @Table(name=”User”) public […]

使用jersey-spring3从JerseyTest容器中检索托管bean

此问题是从上一个问题指定自定义应用程序上下文的后续问题。 我们正在使用泽西弹簧3将泽西1.x的一些数据服务从泽西1.x迁移到泽西2.x. 我们有几个inheritance自JerseyTest的测试类。 其中一些类使用未在web.xml文件中指定的自定义applicationContext.xml文件。 出于对象模拟的目的,我们将在Jersey资源中模拟一些组件。 在Jersey 1.x中,我们可以通过模拟应用程序上下文文件中的对象 并检索这些模拟的实例如下 ClassToMock obj = (ClassToMock)ContextLoader .getCurrentWebApplicationContext() .getAutowireCapableBeanFactory() .getBean(“mockBean”); 如何使用Jersey 2.x使用jersey-spring3实现同样的目标? 我已经梳理了API文档 , 用户指南和一些来源,但无法找到答案。 谢谢。 编辑: 我们将在JAX-RS资源中使用模拟bean。 我们的服务接口已经@Autowired到我们的资源中。 例如 @Path(ProductResource.RESOURCE_PATH) @Component @Scope(“prototype”) public class ProductResource extends GenericResource { /* * Members */ public static final String RESOURCE_PATH = “product/”; @Autowired protected ProductService productService; … 我们想要模拟并设定对这些服务的期望。 例如

在Tomcat 8上实施Jersey 2.x的最佳方法是什么?

我有Web容器和Tomcat的知识,可以部署静态和动态网站。 但我是REST和泽西新手。 我已阅读2.6用户指南,查看了许多网站和YouTubevideo。 在1.x Jersey上似乎有很多信息,但在2.x上没有太多信息我可以在我的环境中使用1.18,但似乎无法使任何部署模型适用于2.x. 我在2.x中注意到有一个应用程序部署模型。 所以我想我会问一些非常通用的问题来开始这个。 哪种部署模型最适合通过Tomcat 8进行基本REST服务?为什么? 我看到使用2.6部署的.jars与使用1.18部署的.jars有很大不同。 有没有一种简单的方法可以告诉您基本的Tomcat安装需要哪些jar子? 如果你有一个基本的例子,那就太好了。 谢谢

@Context注入无效在Jersey ContainerRequestFilter(Dropwizard)

@Context注入适用于类,但不能使它与Objects一起使用。 ContainerRequestFilter中的httpServletRequest生成空指针。 Dropwizard版本: – 1.1.0 ContainerRequestFilter 公共类ApplicationIPAuthFilter实现ContainerRequestFilter {private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationIPAuthFilter.class); 私人HerculesRestAccessor restAccessor; private String applicationName; @Context private HttpServletRequest httpServletRequest; public ApplicationIPAuthFilter(){} public ApplicationIPAuthFilter(HerculesRestAccessor accessor,String applicationName){restAccessor = accessor; this.applicationName = applicationName; } @Override public void filter(ContainerRequestContext requestContext)throws IOException {//需要remote Ip String remoteIp = this.httpServletRequest.getRemoteAddr(); ….}} DynamicFeature @Provider 公共类ApplicationIPAuthFeature实现DynamicFeature { 私人决赛HerculesRestAccessor访问者; private final […]