2015-09-30 2 views
0

Я пытаюсь добавить веб-сервис RESTful с RESTeasy в наше приложение, запущенное на JBoss 7.x, используя Seam2.Нет активного контекста события - RESTeasy, Seam

Я хотел использовать как можно меньшее количество шва, но мне нужно его для инъекции зависимости.

Мои REST конечными точками являются:

@Name("myEndpoint") 
@Stateless 
@Path("/path") 
@Produces(MediaType.APPLICATION_JSON+"; charset=UTF-8") 
public class MyEndpoint { 
    @In private FooService fooService; 

    @GET 
    @Path("/foo/{bar}") 
    public Response foobar(@CookieParam("sessionId") String sessionId, 
          @PathParam("bar") String bar) 
    { ... } 
} 

Я использую класс, расширяющий Application. Конфигурация XML отсутствует. я могу использовать методы веб-службы, и они работают, но я всегда получаю IllegalStateException:

Exception processing transaction Synchronization after completion: java.lang.IllegalStateException: No event context active 

Complete StackTrace

Я попробовать все в documentation, но я не могу получить его. Если я оставляю аннотацию @Stateless, я не получаю никаких инъекций. Добавление @Scope не делает гнездо. Доступ к сервису через seam/resource/ даже не работает (даже без класса Application с @ApplicationPath).

Уходит, если я не использую Dep. Инъекции, но вместо того, чтобы добавить к каждому методу

fooService = Component.getInstance("fooService"); 
Lifecycle.beginCall(); 
... 
Lifecycle.endCall(); 

, который не является действительно хорошим решением. Nah, не работает ни ...

ответ

0

Я решил проблему. По какой-то причине (по-прежнему не уверен, почему, возможно, потому, что я пытался использовать аннотации и код эксклюзивно и без конфигурации XML), моя служба REST была доступна под «нестандартным» URL.

Обычно это было бы что-то вроде «/ seam/resources/rest».

В любом случае, если у вас есть «пользовательский» путь, Seam не знает, что он должен вводить контекст. Вы должны добавить <web:context-filter url-pattern="something" /> к вашему component.xml.

В частности, у нас уже был этот тег, но с атрибутом regex-url-pattern, и я продлил его в соответствии с URL REST.

Смежные вопросы