Я пытаюсь сделать следующее (много деталей, извините...):
Иметь службу jax-rs с @EJB
, чтобы избежать поиска 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:
Но на самом деле комбинация отображения сервлетов и преобразователя jaxrs делает
http://localhost:8080/my-app/rest/my-path/foo вернуть 404
и (обратите внимание на дубль /rest/rest/)
http://localhost:8080/my-app/rest/rest/my-path/foo фактически вызывает метод, но MyEJB имеет значение null
Не удалось найти комбинацию сопоставления сервлета и пути службы и jaxrs.address
, которая заставляет корневой URL-адрес возвращать index.html, а правильный URL-адрес службы вызывает foo, а MyEJB не равен нулю
Любые идеи, как это решить?