问题标签 [hk2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在独立应用程序中使用 Jersey 的依赖注入
我这里有一个界面
这是一种实现
还有一个类依赖于 Idemo
现在说我想测试 Sample 类
这里 Sample 实例没有被创建并且 s 保持为空。我想这是因为当执行到达指定绑定的行时,这个测试类已经创建。但我不确定。使用 Spring Autowired 而不是 jersey CDI同样的作品
如果 Sample 是一个资源/控制器类,测试框架将创建它的一个实例而无需注入它,但是是否可以使用 Jersey DI 测试任何其他非 Web 类?
java - 使用 bindFactory 时没有可用于注入的对象
我对 Jersey (2.18) 应用程序有以下实现:
并在点击注入存储库的服务时获得以下异常
如果我注释掉bindFactory
并使用注释掉的绑定,这一切都有效。我在工厂实施方面遗漏了什么吗?该异常似乎甚至在RepositoryFactory
构造函数被命中之前就发生了。我需要工厂,因为我要对OracleRepository
实例进行一些其他初始化。
java - 当 @Context 用于 setter/field/constructor 注入时,在 Jersey 过滤器之前调用 HK2 工厂
我已经能够根据如何将对象注入球衣请求上下文中的过滤器将球衣资源注入到我的球衣资源中?. 这使我可以成功地注入方法参数:
但是,对于 setter/field/constructor 注入,HK2 Factory 在 jersey 过滤器之前调用,这意味着 provide() 方法返回 null:
有没有办法定义 HK2 工厂何时运行,以便在过滤器运行后调用它?如果不是,那么解决方法是将 MyObject 定义为一个接口,并定义一个额外的实现,该实现在其构造函数中采用 ContainerRequestContext;任何实际使用该实例的尝试都会懒惰地委托给在 ContainerRequestContext 的属性上设置的实现(大概在过滤器运行之前您不会实际使用该实例——此时将设置该属性)。
但我想了解是否可以延迟 HK2 工厂运行的时间点,使其在过滤器之后运行(在方法参数注入的情况下,它已经在过滤器之后运行)。如果不可能,那么我想了解是否有根本原因。
deployment - 在 glassfish 4.1 上部署战争失败
在 Glassfish 4.1 上部署战争时,我收到以下错误:
Glassfish 4.1 安装了 hk2-locator 库。为什么会出现这样的错误?
spring - 是否可以部分使用 Spring DI 部分使用 Jersey DI 构造对象?
我有一个 JerseyWebService 类,它使用 Jersey DI 注入依赖项
依赖项在活页夹中指定
但这里的问题是它ExternalApiService
有其他依赖项,它使用 Spring 来注入它们。
是否可以在 binder 中仅指定 Jersey 将注入的一些依赖项以及 Spring 注入的其他依赖项?
如果不是,那么如果@Inject
不是@Autowired
in ExternalApiService
,是否必须在 binder 类中指定所有绑定?
如果找不到任何绑定,Jersey DI 是否没有类似自动装配的功能或委托向 Spring 注入依赖项?
java - 如何让 HK2 ServiceLocator 使用桥接的 ServiceLocator 中的 Singleton 服务实例?
我们正在使用通过ExtrasUtilities.bridgeServiceLocator()
将应用 ServiceLocator 桥接到 Jersey ServiceLocator 来将在一个 ServiceLocator 中创建的现有 Singleton 应用程序服务注入到 Jersey RESTful Web 服务中。
然而,存在于“外部”定位器中的单例并没有被使用——当注入到 Jersey 服务中时,每个服务都被再次创建。似乎 Singleton 仅在 ServiceLocator 范围内可见,即使它是桥接的。
这是预期的行为吗?如果是这样,有什么方法可以改变这种行为并在桥接的 ServiceLocators 上拥有一个真正的单例?
我已将问题提取到一组测试类中,这些类说明了以下几点:
java - 带有 Jersey 2.1x 的 Google Appengine 在开发服务器中可以正常工作,但在 Appengine 服务器中不能正常工作
我一直在将 Jersey v2.19 与 Google Appengine v1.9.22 一起使用,它在本地开发服务器中运行良好,没有任何问题,但是当我尝试将应用程序部署到 appengine 时。我得到多个例外
使用的框架:
AppEngine Java 1.9.22
泽西 2.19
物化 5.1.5
Guice 3.x
摇篮
以下是我在日志中得到的异常:
org.glassfish.jersey.internal.Errors logErrors:检测到以下警告:警告:检测到未知的 HK2 故障:
多异常堆栈 1 of 4
java.security.AccessControlException:访问被拒绝(“java.lang.RuntimePermission”“getClassLoader”) 在 com.google.appengine.runtime.Request.process-84bc59f0ba240851(Request.java) 在 java.security.AccessControlContext.checkPermission(AccessControlContext.java:382) 在 java.security.AccessController.checkPermission(AccessController.java:572) 在java.lang.SecurityManager.checkPermission(SecurityManager.java:549) at java.lang.ClassLoader.checkClassLoaderPermission(ClassLoader.java:1606) at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1525) at org.jvnet.hk2 .internal.ProxyUtilities$1.run(ProxyUtilities.java:95) at org.jvnet.hk2.internal.ProxyUtilities$1.run(ProxyUtilities.java:90) at java.security.AccessController.doPrivileged(AccessController.java:34) at org.jvnet.hk2.internal.ProxyUtilities.secureCreate(ProxyUtilities.java:90) 在 org.jvnet.hk2.internal.ProxyUtilities。generateProxy(ProxyUtilities.java:206) 在 org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2038) 在 org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:105) 在 org.jvnet .hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87) at org.glassfish.jersey.internal.inject.ContextInjectionResolver.resolve(ContextInjectionResolver.java:126) at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator .java:214) 在 org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:237) 在 org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:360) 在 org.jvnet.hk2。 internal.SystemDescriptor.create(SystemDescriptor.java:470) 在 org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:82) 在 org.jvnet.hk2.internal.SingletonContext$1。org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture$1.call(Cache.java:97) 在 java.util.concurrent.FutureTask.run(FutureTask.java:260) 的计算(SingletonContext.java:70) org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture.run(Cache.java:154) 在 org.glassfish.hk2.utilities.cache.Cache.compute(Cache.java:199) 在 org.jvnet.hk2。 internal.SingletonContext.findOrCreate(SingletonContext.java:121) at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2065) at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:105)在 org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87) 在 org.glassfish.jersey.internal.inject.Providers.getAllRankedProviders(Providers.java:247) 在 org.glassfish.jersey.server.ApplicationHandler .getProcessingProviders(ApplicationHandler.java:758) at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:536) at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:183) at org. glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:349) at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:346) at org.glassfish.jersey.internal.Errors.process( Errors.java:315) 在 org.glassfish.jersey.internal.Errors.process(Errors.java:297) 在 org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255) 在 org.glassfish.jersey .server.ApplicationHandler.(ApplicationHandler.java:346) 在 org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:339) 在 org.glassfish.jersey.servlet.ServletContainer。init(ServletContainer.java:170) 在 org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:393) 在 org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97) 在 org.mortbay .component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662) at org.mortbay.jetty.servlet.Context.startContext(Context.java:140 ) 在 org.mortbay.jetty.webapp.WebAppContext 的 org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) 的 org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)。 doStart(WebAppContext.java:467) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 在 com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437) 在 com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444) 在 com.google.tracing.CurrentContext.runInContext(CurrentContext.java:230) 在 com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java :308) 在 com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300) 在 com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441) 在 java.lang.Thread.run(线程.java:745)TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300) at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441) at java.lang.Thread.run(Thread.java:745)TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300) at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441) at java.lang.Thread.run(Thread.java:745)
多异常堆栈 2 of 4
java.lang.IllegalArgumentException:尝试在 org.glassfish.jersey.process.internal.RequestScoped 范围内为 javax.servlet.http.HttpServletRequest 创建代理时,在 org.jvnet.hk2.internal.ProxyUtilities创建代理时出错.generateProxy(ProxyUtilities.java:212) 在 org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2038) 在 org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:105) 在 org. jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87) 在 org.glassfish.jersey.internal.inject.ContextInjectionResolver.resolve(ContextInjectionResolver.java:126)
...修剪
多异常堆栈 3 of 4
java.lang.IllegalArgumentException:在尝试解决 com.app.webapp.filters.WebApiAuthFilter 的依赖项时发现错误
多异常堆栈 4 of 4
java.lang.IllegalStateException:无法执行操作:在 com.app.webapp.filters.WebApiAuthFilter 上解析
我已经搜索了可能的修复程序,但找不到与我的问题相关的任何内容,我使用 JDO 或 JPA,所以 asm jar 不兼容不是原因。
关于如何解决这个问题的任何想法?
更新 :
我试图找出这个异常的原因,我有一个过滤器,我在其中注入了 HttpServletRequest ,因此引发了异常,但不知道为什么。
java - 注入对象时,@inject 似乎不起作用 NPE
我一直在为这个问题苦苦挣扎,所以我来到这里与您分享。首先,我有一个要在其中注入对象的类:
我的界面:
是我绑定到其实现的接口:
在配置中:
因此,当我运行应用程序并尝试执行我有 NPE 的方法时:
瞧,我很抱歉问这个问题,但我需要一些帮助,而且我已经尽量做到通用,希望它不会影响你的理解。
编辑:
忘了提到 MyClass() 类在另一个类中被调用,如下所示:new MyClass()
所以我认为问题可能就在那里。
java - 循环依赖的 HK2 注入
我使用 HK2 作为依赖注入框架。我正在我的应用程序中实例化一个状态机。因此,A <-> B 是很有可能的,因为根据输入,可以从 B 转换回 A。
我怎样才能实现这样的目标?上面的例子只是为了说明。我有比这更多的州。我试图查看它是否是重复的,但找不到可以处理的。当我尝试ServiceLocator.getService(StateManager.class)
获取此图时,我得到循环依赖异常。做这样的事情有什么好处?
java - Injecting hibernate session to Jersey using HK2
I'm developing little app and have some issues with DI.
I have a repository class for persisting my entities which I inject to my service. And I'd like to inject Session object to it using H2K. For this purpose I try do something similar described in following SO posts:
- Jersey + HK2 + Grizzly: Proper way to inject EntityManager?
- Using Jersey 2.0, how do you register a bindable instance per request?
- How do I properly configure an EntityManager in a jersey / hk2 application?
So I created SFFactory class and register it in ApplicationConfig.
SFFactory.java
ApplicationConfig.java
DefaultMessageRepository
But when I run the app and trying to call repository methods I get NullPoinerException. I can't understand what am I doing wrong. This is what Tomcat log is saying:
Any ideas what wrong with my solution and what causes that problem?