我尝试使用Seam2将RESTeasy RESTful Web服务添加到运行在JBoss 7.x上的应用程序。
我想尽可能少地使用Seam,但我需要它用于Dependancy Injection。
我的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配置。
我可以使用Web服务方法,但是我总是得到IllegalStateException
:
Exception processing transaction Synchronization after completion: java.lang.IllegalStateException: No event context active
我确实尝试了documentation中的所有内容,但我无法将其删除。如果我遗漏@Stateless
注释,我就不会完成任何注射。添加@Scope
不会做杰克。通过seam/resource/
访问服务甚至无法正常工作(即使没有带@ApplicationPath
的Application类。)
如果我不使用Dep,它会消失。注入,而是添加到每个方法
fooService = Component.getInstance("fooService");
Lifecycle.beginCall();
...
Lifecycle.endCall();
这不是一个很好的解决方案。 Nah,也没有工作......
答案 0 :(得分:0)
我已经解决了这个问题。出于某种原因(仍然不确定为什么,也许是因为我试图使用注释和代码独占而没有XML配置),我的REST服务可以在“非标准”URL下使用。
通常它就像“/ seam / resources / rest”。
无论如何,如果你有一个“自定义”路径,Seam不知道它应该注入一个上下文。您需要将<web:context-filter url-pattern="something" />
添加到component.xml
。
具体来说,我们已经有了这个标签,但是使用了属性regex-url-pattern
并且我将其扩展为与REST URL匹配。