Как я могу диагностировать исключение нулевого указателя в Tomcat - PullRequest
0 голосов
/ 13 октября 2011

Я разрабатываю сервлет 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? Кроме того, могу ли я что-нибудь сделать, чтобы защитить / проинформировать / помочь будущим программистам устройства совершить ту же ошибку (что бы это ни было)? По всей видимости, проблема серьезная, так что я нахожусь в опасности, что хакер сломает мой сервер, совершив ошибку преднамеренно?

Любой быстрый ответ с любыми предложениями заслужит мою вечную благодарность.


Просто для обновления - я понятия не имею, почему, но проблема исчезла, когда мы удалили все возвраты каретки и переводы строк из сообщений после начального заголовка.

Спасибо за вашу помощь. Правила переполнения стека!

1 Ответ

0 голосов
/ 13 октября 2011

Положите в журналы отладки. Тогда вы будете знать, где это не удалось. Такие вещи, как знание, как запрос отличается, и почему это приводит к разрыву соединения, важны и могут быть найдены путем регистрации всего, что делает сервер. Log4j великолепен, потому что он позволяет вам регистрировать все, что вы хотите, а затем мгновенно отключать его, когда он вам больше не нужен.

«SEVERE» означает, что ваш сервер не может просто замаскировать ошибку и продолжить работу с программой, он не указывает на серьезность проблемы безопасности, которая может не существовать.

...