当前位置: 首页 > 知识库问答 >
问题:

Jersey 2.26+:将HK2的工厂转换为供应商后未调用configure()

东门秦迟
2023-03-14

为了简化我们的web服务,我想使用版本2.34中的Jersey框架引入一个自定义的MyObj类,并希望通过@Context注释注入创建的实例。

我有两个问题:

工作HK2工厂示例:

public class MyObjHK {}

import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.process.internal.RequestScoped;
public class BinderHK
extends AbstractBinder {
    @Override protected void configure() {
        bindFactory(MyObjFactoryHK.class).to(MyObjHK.class).in(RequestScoped.class);
    }
}

import org.glassfish.hk2.api.Factory;
public class MyObjFactoryHK
implements Factory<MyObjHK> {
    @Override public MyObjHK provide() {return new MyObjHK();} // ok
    @Override public void dispose(MyObjHK instance) {};
}

public class API_HK2 {
    @GET
    public static Response myobjhk(@Context MyObjHK obj) {
        System.out.println("called hk, obj="+obj); // ok
        return Response.ok().build();
    }
}

不工作供应商示例:

public class MyObj {}

import org.glassfish.jersey.internal.inject.AbstractBinder;
import org.glassfish.jersey.process.internal.RequestScoped;
public class Binder
extends AbstractBinder {
    @Override protected void configure() { // not called ???
        bindFactory(MyObjFactory.class).to(MyObj.class).in(RequestScoped.class);
    }
}

import java.util.function.Supplier;
public class MyObjFactory
implements Supplier<MyObj> { 
    @Override public MyObj get() {return new MyObj();}
}

public class API {
    @GET
    public static Response myobj(@Context MyObj obj) {
        System.out.println("called, obj="+obj); // null ???
        return Response.ok().build();
    }
}

共有1个答案

平嘉熙
2023-03-14

绑定器不能用jersey.config.classnamesinit-param注册。您需要用resourceConfigFeature注册它(并用init-param注册该特性)

@Provider
public class MyFeature implements Feature {
    @Override
    pubic boolean configure(FeatureContext ctx) {
        ctx.register(new MyBinder());
        return true;
    }
}
 类似资料:
  • 问题内容: 现在我使用的球衣,我想注入映射到资源类方面,它接受所有,和格式的提交。 我遵循Jersey文档中指定的说明: https://jersey.github.io/documentation/latest/ioc.html#d0e17033 GeneralForm.java GeneralFormFactory.java 然后将那个Factory注册到我的ResouceConfig中: 但

  • 我对这项服务、供应商和工厂有点困惑。AngularJS模块的服务、提供者和工厂之间有什么区别?请讲述并举例说明

  • 我正在尝试理解HK2工厂在泽西应用程序中的实现。 null 每个请求都会创建MyFactory的两个对象 单例工厂,我的理解是,工厂(MyFactory)的一个单一对象,它在注入时提供某种对象。 所以(1)应该工作还是我遗漏了什么? 当位置在下方时,位置在上方的NPE 在以下位置时,在上面位置无NPE

  • 问题内容: 我有一个下面的SQL表: 我正在使用另一个表来存储值,例如: 要将值插入这些表中,我正在使用存储过程(其中一部分): 动态执行将引发一个异常,即不允许隐式转换sql_variant。有什么方法可以将sql_variant类型转换为varchar提供的类型?如: 其中@valueType是varchar而不是datetype 问题答案: 是的,您可以将参数作为传递给,但是您需要使用“转换

  • 问题内容: 我有curl命令: 我想在Java API中创建HTTP请求,该操作将执行相同的操作。可以在本README中找到该curl命令。它用于开始在RabbitMQ上记录日志。回应并不重要。 现在,我创建了这样的内容(我删除了不太重要的行,例如捕获了异常等),但是不幸的是,它不起作用: 完整代码 问题答案: 这是最终的解决方案: