У меня все еще есть эта проблема. Вот мой обходной путь - написать ServletRequestListener, который помещает запрос в переменную ThreadLocal. Затем WebService может получить запрос от ThreadLocal. Другими словами, я переопределяю то, что просто не работает для меня.
Вот слушатель:
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
public class SDMXRequestListener implements ServletRequestListener {
public SDMXRequestListener() {
}
public void requestDestroyed(ServletRequestEvent event) {
}
public void requestInitialized(ServletRequestEvent event) {
final ServletRequest request = event.getServletRequest();
ServletRequestStore.setServletRequest(request);
}
}
Вот обертка ThreadLocal:
import javax.servlet.ServletRequest;
public class ServletRequestStore {
private final static ThreadLocal<ServletRequest> servletRequests = new ThreadLocal<ServletRequest>();
public static void setServletRequest(ServletRequest request) {
servletRequests.set(request);
}
public static ServletRequest getServletRequest() {
return servletRequests.get();
}
}
И проводка web.xml:
<listener>
<listener-class>ecb.sdw.webservices.SDMXRequestListener</listener-class>
</listener>
Веб-служба использует следующий код для получения запроса:
окончательный запрос HttpServletRequest =
(HttpServletRequest)
ServletRequestStore.getServletRequest ();