Я разрабатываю сервлет Java для работы в Tomcat. В настоящее время я тестирую его с пакетом XAMPP, включая Tomcat 7, на компьютере с Windows XP (не волнуйтесь, я не планирую использовать его в производстве). Я делаю это, потому что мне нужно держать соединение открытым, чтобы я мог использовать серверную передачу Comet (push-server, это обязательное требование).
Сервлет запущен, и я написал тестовый клиент, который показывает, что клиент и сервер отлично взаимодействуют. Клиент подключается к серверу через Интернет с помощью заголовка HTTP, который генерирует событие BEGIN в сервлете, а затем связывается в ответ на события READ.
Затем я пробую «настоящий» клиент, который для нас является проприетарным устройством, над которым у меня нет полного контроля. Трудно получить много информации о том, что он делает, и, что еще хуже, другие программисты могут внести в него изменения в будущем. В лучшем случае все, что я смогу сделать, это дать рекомендации о будущих изменениях.
Устройство делает HTTP-запрос с заголовком, сервер обрабатывает событие BEGIN, но затем, когда устройство пытается продолжить диалог, соединение прерывается, и я получаю в файле журнала catalina следующее:
12 октября 2011 г., 17:59:00 org.apache.coyote.http11.Http11NioProcessor process
SEVERE: Ошибка обработки запроса
java.lang.NullPointerException
в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:436)
в org.apache.coyote.http11.Http11NioProcessor.process (Http11NioProcessor.java:317)
в org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:515)
в org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run (NioEndpoint.java:1544)
в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1110)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:603)
at java.lang.Thread.run (Thread.java:722)
Я знаю, что трудно диагностировать эту ограниченную информацию, и это именно мой вопрос. Как получить больше информации о том, что происходит с Tomcat? Кроме того, могу ли я что-нибудь сделать, чтобы защитить / проинформировать / помочь будущим программистам устройства совершить ту же ошибку (что бы это ни было)? По всей видимости, проблема серьезная, так что я нахожусь в опасности, что хакер сломает мой сервер, совершив ошибку преднамеренно?
Любой быстрый ответ с любыми предложениями заслужит мою вечную благодарность.
Просто для обновления - я понятия не имею, почему, но проблема исчезла, когда мы удалили все возвраты каретки и переводы строк из сообщений после начального заголовка.
Спасибо за вашу помощь. Правила переполнения стека!