アンマーシャリングに JAXB を使用していますか? 私は RESTEasy に詳しくありません。JAXB を使用できるようですが、それが唯一のオプションかどうかはわかりません。
JAXB を使用している場合、Unmarshal Event CallbacksUnmarshaller
がサポートされます。非整列化されているオブジェクトのメソッドを呼び出すことも、別のイベント リスナーを呼び出すこともできます。CDI への参照(シンプルな、または JNDI at を介して取得) を持つリスナーを登録できます。リスナーは、それを使用して新しく非整列化されたオブジェクトを注入します。BeanManager
@Inject
java:comp/BeanManager
私は決して CDI の専門家ではありませんが、実験によると、これは既に作成されたオブジェクトを挿入しているように見えます。
public class Injector<T> {
private final BeanManager beanManager;
private final InjectionTarget<T> injectionTarget;
private final Bean<T> bean;
public Injector(BeanManager beanManager, Class<T> cl) {
this.beanManager = beanManager;
injectionTarget = beanManager.createInjectionTarget(beanManager.createAnnotatedType(cl));
bean = resolve(beanManager.getBeans(cl));
}
private Bean<T> resolve(Set<Bean<?>> beans) {
@SuppressWarnings("unchecked")
Bean<T> bean = (Bean<T>) beanManager.resolve(beans);
return bean;
}
public CreationalContext<T> inject(T obj) {
CreationalContext<T> creationalContext = beanManager.createCreationalContext(bean);
injectionTarget.inject(obj, creationalContext);
return creationalContext;
}
}
そのコードは、いくつかのクラスの既存のインスタンスを取得し、それに依存関係を注入します。これは CDI のやや不規則な使い方ですが、うまくいくようです (さらに、完全に有効でサポートされていると思います)。
呼び出し元のコードは、返された を保持し、オブジェクトの処理が終了した後でCreationalContext
そのメソッドを呼び出す必要があることに注意してください。release