2013-04-16 2 views
3

Я разрабатываю приложение сервлета 3.0, которое должно обрабатывать запросы асинхронно.Отсутствуют методы асинхронного сервлета api 3.0 jar?

компиляция завершается с сообщением

cannot find symbol 
symbol : method startAsync(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 
location: interface javax.servlet.http.HttpServletRequest 

.

У меня есть следующая зависимость в моем pom.xml:

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-web-api</artifactId> 
    <version>6.0</version> 
</dependency> 

Интересно, что импорт javax.servlet.AsyncContext успешно. Но когда я перечисляю методы javax.servlet.ServletRequest, нет ни одного из 3.0 API, который обрабатывает асинхронные запросы.

public abstract java.lang.String javax.servlet.ServletRequest.getScheme() 
public abstract java.lang.String javax.servlet.ServletRequest.getProtocol() 
public abstract javax.servlet.ServletInputStream javax.servlet.ServletRequest.getInputStream() throws java.io.IOException 
public abstract int javax.servlet.ServletRequest.getContentLength() 
public abstract java.lang.Object javax.servlet.ServletRequest.getAttribute(java.lang.String) 
public abstract java.lang.String javax.servlet.ServletRequest.getContentType() 
public abstract java.util.Locale javax.servlet.ServletRequest.getLocale() 
public abstract java.util.Enumeration javax.servlet.ServletRequest.getAttributeNames() 
public abstract java.lang.String javax.servlet.ServletRequest.getCharacterEncoding() 
public abstract void javax.servlet.ServletRequest.setCharacterEncoding(java.lang.String) throws java.io.UnsupportedEncodingException 
public abstract java.lang.String javax.servlet.ServletRequest.getParameter(java.lang.String) 
public abstract java.util.Enumeration javax.servlet.ServletRequest.getParameterNames() 
public abstract java.lang.String[] javax.servlet.ServletRequest.getParameterValues(java.lang.String) 
public abstract java.util.Map javax.servlet.ServletRequest.getParameterMap() 
public abstract java.lang.String javax.servlet.ServletRequest.getServerName() 
public abstract int javax.servlet.ServletRequest.getServerPort() 
public abstract java.io.BufferedReader javax.servlet.ServletRequest.getReader() throws java.io.IOException 
public abstract java.lang.String javax.servlet.ServletRequest.getRemoteAddr() 
public abstract java.lang.String javax.servlet.ServletRequest.getRemoteHost() 
public abstract void javax.servlet.ServletRequest.setAttribute(java.lang.String,java.lang.Object) 
public abstract void javax.servlet.ServletRequest.removeAttribute(java.lang.String) 
public abstract java.util.Enumeration javax.servlet.ServletRequest.getLocales() 
public abstract boolean javax.servlet.ServletRequest.isSecure() 
public abstract javax.servlet.RequestDispatcher javax.servlet.ServletRequest.getRequestDispatcher(java.lang.String) 
public abstract java.lang.String javax.servlet.ServletRequest.getRealPath(java.lang.String) 
public abstract int javax.servlet.ServletRequest.getRemotePort() 
public abstract java.lang.String javax.servlet.ServletRequest.getLocalName() 
public abstract java.lang.String javax.servlet.ServletRequest.getLocalAddr() 
public abstract int javax.servlet.ServletRequest.getLocalPort() 

Что мне не хватает?

+0

Вам нужно: http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api/3.0.1 –

+0

Просто попробовал предложенный POM, но все равно получаю ту же ошибку компиляции, и методы async все еще остаются отсутствует в интерфейсе ServletRequest. Weird :) –

+0

Возможно, возникнет проблема, если вы не удалите другого. Какую настройку «сервлета» выбрать? –

ответ

4

Я предполагаю, что вы как-то «сумели» ссылаться на более старую библиотеку servlet-api (вероятно, транзитивно), которая находится в пути к классу до javaee-web-api. Это означает, что существующие классы извлекаются из более старых servlet-api, тогда как классы, которые не существуют в более старой спецификации, загружаются с javaee-web-api.

Вы можете запустить mvn dependency:tree, чтобы посмотреть, на что ссылается устаревшая библиотека, и затем исключить ее.

+0

Спасибо, это действительно было причиной. Удивленный, что Maven не выдает предупреждения в такой ситуации. –

+0

IMHO Управление зависимостями в Maven ist просто пытается скрыть сложность и фактически не решить ее. До тех пор, пока хранилища зависимостей так плохо поддерживаются, как они в настоящее время (например, в данном случае артефакт API сервлета присутствует в разных версиях с разными именами/идентификаторами), вы должны столкнуться с такими проблемами. – jarnbjo

+0

@jarnbjo грустный, но верно: O – skirsch

Смежные вопросы