Отсутствует зависимость для поля при попытке добавить пользовательский контекст с Джерси - PullRequest
8 голосов
/ 12 декабря 2011

У меня есть собственный контекст:

public class MyContext {
    public String doSomething() {...}
}

Я создал преобразователь контекста:

@Provider
public class MyContextResolver implements ContextResolver<MyContext> {

     public MyContext getContext(Class<?> type) {
         return new MyContext();
     }
}

Теперь в ресурсе я пытаюсь добавить его:

@Path("/")
public class MyResource {

    @Context MyContext context;

}

И я получаю следующую ошибку:

SEVERE: Missing dependency for field: com.something.MyContext com.something.MyResource.context

Тот же код прекрасно работает с Apache Wink 1.1.3, но не работает с Джерси 1.10.

Любые идеи приветствуются.1015 *

Ответы [ 2 ]

10 голосов
/ 12 декабря 2011

Спецификация JAX-RS не предписывает поведение, предоставляемое Apache Wink. IOW, функция, которую вы пытаетесь использовать, которая работает на Apache Wink делает ваш код непереносимым.

Для создания 100% переносимого кода JAX-RS вам необходимо ввести javax.ws.rs.ext.Providers и затем используйте:

ContextResolver<MyContext> r = Providers.getContextResolver(MyContext.class, null);
MyContext ctx = r.getContext(MyContext.class);

для получения вашего экземпляра MyContext.

В Джерси вы также можете напрямую ввести ContextResolver, которая экономит вам одну строку кода из приведенного выше, но обратите внимание, что это Стратегия также не на 100% портативна.

0 голосов
/ 19 марта 2013

Реализация InjectableProvider . Скорее всего, путем расширения PerRequestTypeInjectableProvider или SingletonTypeInjectableProvider.

@Provider
public class MyContextResolver extends SingletonTypeInjectableProvider<Context, MyContext>{
    public MyContextResolver() {
        super(MyContext.class, new MyContext());
    }
}

Позвольте вам иметь:

@Context MyContext context;
...