【发布时间】:2016-08-16 17:10:49
【问题描述】:
我正在尝试执行以下操作(很多细节,抱歉...):
有一个带有@EJB 的 jax-rs 服务以避免 jndi 查找。类似的东西
@Path("rest/my-path)
public class Service {
@EJB
private MyEJB me;
@Path("foo")
@GET
public String foo() {
return me.foo();
}
}
使用CXFNonSpringJaxrsServlet 并限制url-pattern。 web.xml 应该是这样的:
<servlet>
<servlet-name>my-servlet</servlet-name>
<servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
<init-param>
<param-name>jaxrs.serviceClasses</param-name>
<param-value>
com.example.Service
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>my-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
所以理论上http://localhost:8080/my-app/rest/my-path/foo 会打电话,你猜对了,foo()
TomEE 的日志支持这一点:
设置服务器的发布地址为/REST Application:
但实际上,servlet-mapping 和 jaxrs 解析器的结合使得
http://localhost:8080/my-app/rest/my-path/foo返回404
and(注意双/rest/rest/)
http://localhost:8080/my-app/rest/rest/my-path/foo 实际调用了方法但是 MyEJB 为空
没有找到任何 servlet-mapping 和服务路径和 jaxrs.address 的组合使根 url 返回 index.html 并且正确的服务 url 正在调用 foo 并且 MyEJB 不为空
有什么办法可以解决这个问题吗?
【问题讨论】:
标签: jax-rs cxf openejb tomee-7