2013-12-20 4 views
0

Я разрабатываю Java-агент. У меня ошибка NullPointerException, которая, как я полагаю, не должна произойти.Java NullPointerException в Java-агенте

Вот сообщение отладки консоль:

java.lang.NullPointerException 
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:719) 
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:646) 
    at COM.ibm.JEmpower.applet.http.HttpURLConnection.getInputStream(HttpURLConnection.java:411) 
    at COM.ibm.JEmpower.applet.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:703) 
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:399) 
    at JavaAgent.NotesMain(JavaAgent.java:16) 
    at lotus.domino.AgentBase.runNotes(Unknown Source) 
    at lotus.domino.NotesThread.run(Unknown Source) 

Этот код в Java агент

import lotus.domino.*; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.Date; 
public class JavaAgent extends AgentBase { 

    public void NotesMain() { 
     String strAux = "[A Working URL]"; 
     try { 
      Session session = getSession(); 
      AgentContext agentContext = session.getAgentContext(); 

      // (Your code goes here) 

      HttpURLConnection httpCon = (HttpURLConnection) new URL(strAux).openConnection(); 

      httpCon.setRequestMethod("HEAD"); 
      httpCon.setConnectTimeout(20000); 
      httpCon.setReadTimeout(20000); 

      httpCon.connect(); 

      System.out.println(HttpCon.getURL().toString()); 

      int responsecode = httpCon.getResponseCode(); 
      System.out.println("Response code is " + responsecode + " - " + httpCon.getResponseMessage()); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 

В основном точках ошибки в System.out.println("Response code is " + httpCon.getResponseCode() + " - " + httpCon.getResponseMessage());.

Дело в том, что URL-адрес является рабочей ссылкой, так как я пробовал ее, обратившись в браузере.

В чем могут быть возможные причины этой ошибки? Это также не работает на локальных нотах db, которые я создал для тестирования. Однако в обычной Java-программе, не разработанной в заметках, она работает.

+0

Debug, и посмотрите, какой из 'httpCon',' getResponseCode() 'или' getResponseMessage() 'is' null' –

+0

Хорошо. возвращайся сразу же. Попробует выяснить, является ли один из них нулевым. – Jigs

+0

Они, вероятно, будут равны нулю .... –

ответ

2

Это бессмысленно получить код ответа, прежде чем вы что-то отправили. Вы должны сначала отправить запрос, затем получить ответный код, а затем получить ответ, если потребуется

+0

Я попытался добавить в 'HttpCon.setRequestMethod (" HEAD ");' и 'HttpCon.connect();' но я все еще получаю ту же ошибку ... – Jigs

+0

Я следую руководству по этому вопросу stackoverflow http://stackoverflow.com/questions/3584210/preferred-java-way-to-ping-a-http-url-for-availability. Я тестирую код в Pinging HTTP-url и получаю код ответа. По-прежнему такая же ошибка. – Jigs

+0

@Jigs, вы проверили, не является ли httpCon непустым? – sasankad

1

У вас может быть проблема с кодом, но у вас также может быть проблема с разрешениями.

Ваш код работает как агент Java на сервере IBM Lotus Domino. Это означает, что он подвергается ограничениям на то, что он может сделать. Существует три уровня контроля: ограничения, налагаемые задачей AMGR Domino, ограничения, назначенные вашему агенту, и ограничения, налагаемые JVM. Предполагая, что вы являетесь подписчиком агента, удостоверились ли вы, что у вас есть разрешение на запуск неограниченных агентов (вкладка «Безопасность» документа сервера в Domiono Directory)? И проверили ли вы настройки на своем агенте (вкладка «Безопасность» диалогового окна «Свойства агента» для вашего агента)? Если у вас есть все те, которые установлены правильно, вам, возможно, придется посмотреть файл jvm/lib/security/java.policy на вашей установке сервера Domino.

+0

'... вы убедились, что у вас есть разрешение на запуск неограниченных агентов'. Относительно этого. Существует оригинальный агент Java, подписанный одним из членов моей команды, который содержит код, похожий на тот, который я опубликовал, и я уверен, что у него есть разрешение на запуск неограниченных агентов. Однако такая же ошибка возникает, когда я сейчас исследую. 'Под вкладкой безопасности агента. Установлен флажок «Выполнить как веб-пользователь», запретить неограниченные действия и в доступе по умолчанию, администратор сайта и разработчик отмечены галочкой. (Я являюсь участником группы разработчиков/роли) – Jigs

+0

Хммм ... вы написали «запретить неограниченное», но я считаю, что выбор «не разрешает ограниченные операции», «разрешать ограниченные операции» или «разрешать ограниченные операции с полным права доступа к доступу ». Если вы хотите сделать доступ к сети, я считаю, что вам нужно «разрешить ограниченные возможности» или «разрешить ограниченные операции с полным доступом ...». –

+0

Извините, я имел в виду 'Запретить запрещенные операции'. Я изменил его, чтобы «разрешить ограниченные операции с полным доступом», однако ошибка остается прежней. – Jigs

1
  1. Закрыть Notes/Дизайнерские
  2. Open Task Manager в Windows,
  3. Найти и убить всех IBM Lotus Notes/Domino обрабатывает
  4. Попробуйте снова

Работал для меня

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