我试图在JBoss 7上运行的应用程序中添加一个restasy的RESTful web服务。
我想使用尽可能少的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配置。我可以使用web服务方法,它们工作,但我总是得到一个IllegalStateException
:
Exception processing transaction Synchronization after completion: java.lang.IllegalStateException: No event context active
完成加
我确实尝试了文档中的所有方法,但我无法摆脱它。如果我省略了@Stateless
注释,我就没有完成任何注入。添加@Scope
不起任何作用。通过seam/resource/
访问服务甚至不能工作(即使没有@ApplicationPath
的Application类)。
如果我不使用Dep. Injection,而是在中添加每个方法
fooService = Component.getInstance("fooService");
Lifecycle.beginCall();
...
Lifecycle.endCall();
这不是一个很好的解决方案。不行,也不行
问题已经解决。由于某种原因(仍然不确定为什么,可能是因为我试图只使用注释和代码而不使用XML配置),我的REST服务在"非标准"URL下可用。
通常是"/seam/resources/rest"。
无论如何,如果你有一个"自定义"路径,Seam不知道它应该注入上下文。您需要将<web:context-filter url-pattern="something" />
添加到component.xml
。
具体来说,我们已经有了这个标签,但是使用属性regex-url-pattern
和我扩展它以匹配REST URL。