2013-12-14 3 views
2

Я разрабатываю сервер REST под NetBeans 7.4 в Windows (с Java SE Runtime 1.7.0_21-b11) Затем .war развернут на Linux-машине под управлением Tomcat (Java 1.7.0_45-b18) с автоматизированным TeamCity построить с помощью ant для сборки .warКак обрабатывать 2 разных версии HttpServletRequest в Java7?

Я пытаюсь провести тестирование методов REST с помощью специального встроенного класса, реализующего HttpServletRequest, который реализует только несколько методов.

public class HttpMockReq implements HttpServletRequest { @Override ... } 

Моя проблема заключается в том, что определение этого интерфейса отличается в моем Dev среде в Windows, и когда я скомпилировать его с муравья на Linux. В частности, 3 методы определены в HttpServletRequest на Windows, которые не существуют в версии Linux:

changeSessionId, 
upgrade 

и

setContentLength 

и сборки Linux жалуется, что я ничего с этим (подделка не отменяет).

я на самом деле имеют один и тот же вопрос с HttpServletResponse с

setContentLengthLong 

Я немного потерял с различными библиотеками, инструменты и установки Java. Я не могу понять, как/почему сторона Windows (которая имеет более старую версию Java 7) имеет более широкое определение этих интерфейсов.

Боковой вопрос: есть ли способ сделать одну из этих окружений более богатой или более бедной реализацией с помощью @Ignore или что-то в этом роде?

ответ

2

Возможно, ваша проблема - это версия Tomcat, которую вы используете. Метод changeSessionId() от Servlets 3.1 spec, который поддерживается только для Tomcat 8.0.X, возможно, у вас установлен Tomcat 7.0.X, проверьте его, и если true, попробуйте загрузить и установить Tomcat 8.0.X (см. http://tomcat.apache.org/whichversion.html)

+0

Это действительно так. Есть ли способ попросить Netbeans на стороне Windows использовать более старую спецификацию сервлета? –

+0

Чтобы решить проблему, указанную в моем контексте, исправление заключалось в том, чтобы явно добавить servlet-api.jar из Tomcat7 в список баннеров проекта NetBeans. Это имеет приоритет над j2ee-platform-classpath, и мой макет был очень доволен. –

0

Вместо того чтобы реализовывать интерфейс, рассмотрите расширение HttpServletRequestWrapper. Если вам нужно иметь возможность реализовать разные, несовместимые версии интерфейса, рассмотрите creating a proxy.

Так как это для модульных испытаний, рассмотрите рамки mocking, такие как Mockito.

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