Я хочу не вводить HttpServletRequest в мой сервис с помощью @Context
аннотации.Вот мой пример:
@Path("/")
public class MyService {
@Context
private HttpServletRequest request;
}
Я использую реализацию Apache CXF, и вот мои зависимости от pom.xml:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.1.7</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
</dependency>
Также я использую Apache Karaf OSGI-контейнер для развертывания, и поэтомуМое приложение относится к типу пакетной упаковки.Для этого есть конфигурация:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.5.0</version>
<configuration>
<instructions>
<Import-Package>
!*,
javax.ws.rs,
javax.ws.rs.core,
javax.ws.rs.ext,
org.apache.cxf.jaxrs.impl.tl,
</Import-Package>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
</plugin>
Без javax.ws.rs.ext
и org.apache.cxf.jaxrs.impl.tl
в разделе import-пакета я получил одно из следующих исключений:
Caused by: java.lang.IllegalArgumentException: interface javax.ws.rs.ext.Providers is not visible from class loader
Caused by: java.lang.IllegalArgumentException: interface org.apache.cxf.jaxrs.impl.tl.ThreadLocalProxy is not visible from class loader
Так что теперь яу меня есть исключение при попытке развернуть мое приложение:
Caused by: java.lang.IllegalArgumentException: Can not set javax.servlet.http.HttpServletRequest field MyService.request to org.apache.cxf.jaxrs.impl.tl.ThreadLocalHttpServletRequest
И я потратил много времени, чтобы выяснить, в чем проблема .. Но я заметил одну вещь:
, если я использую ThreadLocalHttpServletRequest request
вместо HttpServletRequest request
, тогда оно работает без исключений, но поле request
равно null
, когда я пытаюсь использовать его из любых методов.
Что я должен сделать, чтобы он нормально работал с HttpServletReqest
?