Tag: hk2

Jersey2,Hk2dependency injection(自动)给出AbstractMethodError:org.jvnet.hk2.internal.DynamicConfigurationImpl.addIdempotentFilter

坚持这个问题一段时间。 我正在尝试集成Tomcat 9,JDK 10,Jersey 2.23,HK2(用于DI)以及自动dependency injection。 我已经按照本教程 ,但得到以下错误,我搜索了很多,但没有找到任何东西。 我已经使用依赖来生成“META-INF / hk2-locator / default”,它正在生成。 依赖 org.glassfish.hk2 hk2-metadata-generator 2.4.0 错误堆栈 SEVERE: Servlet [MyApplication] in web application [/javaeeLearning] threw load() exception java.lang.AbstractMethodError: org.jvnet.hk2.internal.DynamicConfigurationImpl.addIdempotentFilter([Lorg/glassfish/hk2/api/Filter;)V at org.glassfish.hk2.utilities.ServiceLocatorUtilities.addClasses(ServiceLocatorUtilities.java:451) at org.glassfish.hk2.utilities.ServiceLocatorUtilities.enablePerThreadScope(ServiceLocatorUtilities.java:107) at org.glassfish.jersey.internal.inject.Injections._createLocator(Injections.java:141) at org.glassfish.jersey.internal.inject.Injections.createLocator(Injections.java:123) at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:330) at org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:392) at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177) at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369) at javax.servlet.GenericServlet.init(GenericServlet.java:158) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1124) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1079) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:971) at […]

Java / Jersey – 使用ParamInjectionResolver创建自己的注入解析器 – 奇怪的行为

我正在尝试创建一个注射旋转变压器。 我有一个数据类: public class MyData { … } 我有以下注释: @Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyDataInject { } 我的注射解析器看起来像这样: public class MyDataInjectionResolver extends ParamInjectionResolver { public MyDataInjectionResolver () { super(MyDataValueFactoryProvider.class); } @Singleton public static class MyDataValueFactoryProvider extends AbstractValueFactoryProvider { @Inject public MyDataValueFactoryProvider(MultivaluedParameterExtractorProvider provider, ServiceLocator locator) { super(provider, locator, Parameter.Source.UNKNOWN); } @Override protected Factory createValueFactory(Parameter parameter) […]

泽西2 + HK2 – 自动绑定classess

继续主题泽西2 + HK2 – @ApplicationScoped无效 。 我已经知道了,如何绑定类以便@Inject正确。 你有任何想法,如何自动化这个过程? 将所有单个服务放在bind语句中似乎在我的应用程序中非常难闻。

如何在jersey 2.0中使用hk2注入常量?

如何在jersey中使用HK2将常量注入某个类? 有了Guice,我可以有类似的课程 public class DependsOnFoo { @Inject public DependsOnFoo(@Named(“FOO”) String foo) { … } … } 我会在注入器中配置类似的东西 bind(String.class).named(“FOO”).toInstance(new String(“foo”)) HK2中的等价物(如果有的话)是多少?

HK2注释未被处理

我正在通过泽西岛使用HK2,我希望得到@Immediate服务。 在这个过程中,我注意到(似乎)我的服务的所有注释都没有注册。 例如,在启动我的ServiceLocator并查看我的描述符以获取使用@Singleton注释的服务之后,它仍然设置为@PerLookup。 我的启动应用程序处理程序的代码如下: ApplicationHandler handler = new ApplicationHandler(resourceConfig, new AbstractBinder() { … }); 我的活页夹注册了这样的服务: bindAsContract(ShouldHaveSingletonScope.class); 在此之后立即查看我的ServiceLocator,我发现范围没有从类中拉出(仍然是@PerLookup)。 我需要指定一些额外的内容来告诉HK2解析类注释吗? 这似乎是一个非常标准的用例,所以我必须遗漏一些东西。

如何在Jersey 2.12获得HK2 ServiceLocator?

我想创建一个类的单例实例,该类没有作为资源或服务参与Jersey,但是希望从Jersey ServiceLocator注入其依赖项。 我可以在我的ResourceConfig构造函数中手动注册这个类,然后将ResourceConfig传递给Grizzly工厂方法,如下所示: ResourceConfig resourceConfig = new DeviceServiceApplication(); LOGGER.info(“Starting grizzly2…”); return GrizzlyHttpServerFactory.createHttpServer(BASE_URI, resourceConfig, mServiceLocator); 剩下的问题是如何获取对Jersey ServiceLocator的引用,以便我可以调用createAndInitialize()来获取注入了依赖项的对象。 我在以前的Jersey版本中看到有一些构造函数变体需要ApplicationHandler,它当然提供对服务定位器的访问(我如何初始化这是另一回事)。 您还可以看到我已经尝试传入父ServiceLocator,但当然解决方案是从child – > parent locator而不是在另一个方向,所以要求父对象失败因为Jersey @Contract和@Service类型不是这里可见。 我是否需要使用GrizzlyHttpServerFactory以外的其他东西? 我是否放弃并手动连接我的单身依赖项?

如何在jersey2 / hk2应用程序中获取Jackson Object Mapper的引用

我有一个jersey2应用程序配置为通过jackson支持JSON,添加 org.glassfish.jersey.media jersey-media-json-jackson ${jersey.version} 在POM文件中 public MyApplication() { … register(JacksonFeature.class) … } 在我的申请中。 一切正常,我的资源将反序列化的POJO作为参数 @POST @Consumes(MediaType.APPLICATION_JSON) public void blah(MyPojo p) { … } 现在,其中一个资源需要引用Jackson的ObjectMapper来自行进行反序列化。 我尝试过这样的事情 @Inject public MyResource(@Context ObjectMapper mapper) { … } 要么 @GET public String foo(@Context ObjectMapper mapper) { … } 但在这两种情况下,对mapper的引用都为null。 如何在我的资源中注入对ObjectMapper的引用?

泽西岛2.26和春季4.3.10但没有HK2

是否可以配置Jersey 2.26.x,它完全取决于注射用Spring而不是HK2? 我知道Jersey现在与Spring兼容,但它是否也可以完全摆脱HK2?

使用自定义hk2 InjectionResolver注入应用程序配置

跟我上一个问题有所帮助。 我正在尝试使用JSR-330标准注释和与泽西捆绑的HK2框架注入应用程序配置数据。 理想情况下,我想为Named注释创建一个自定义的InjectionResolver ,它将在Map或Properties对象中查找所需的值,我将从其他地方读取的数据填充该值。 在我的第一次尝试中,我创建了一个类似的Application实例 public class MyApplication extends ResourceConfig { … packages(MY_PACKAGES); property(MY_CONFIG_PROPERTY, someValue); register(new AbstractBinder() { @Override protected void configure() { bind(ConfigurationInjectionResolver.class) .to(new TypeLiteral<InjectionResolver>(){}) .in(Singleton.class) } }); } 然后我的InjectionResolver看起来像 public class ConfigurationInjectionResolver implements InjectionResolver { @Context Application application; @Override public Object resolve(Injectee injectee, ServiceHandle serviceHandle) { // lookup data in application.getProperties(); } } […]

在Jersey2中使用@Immediate注释

我有一个与此处提出的问题类似的问题: 如何让我的Jersey 2端点在启动时急切地初始化? 但稍微下线了。 我可以立即加载我的资源,但是当我尝试通过调用REST url来使用它时,我得到以下堆栈跟踪。 java.lang.IllegalStateException: Could not find an active context for org.glassfish.hk2.api.Immediate 2. java.lang.IllegalStateException: While attempting to create a service for SystemDescriptor( implementation=com.service.MyResource contracts={com.service.MyResource} scope=org.glassfish.hk2.api.Immediate qualifiers={} descriptorType=CLASS descriptorVisibility=NORMAL metadata= rank=0 loader=null proxiable=null proxyForSameScope=null analysisName=null id=150 locatorId=0 identityHashCode=1249600275 reified=true) in scope org.glassfish.hk2.api.Immediate an error occured while locating the context 我的TResource类因此被注释: @Immediate @Path(“/test/v1”) public […]