У меня есть java-агент, который обрабатывает HTTP-запросы с помощью jsoup. Этот агент отлично работает, когда я запускаю его вручную с консоли сервера. но даст ошибку, когда я запустил ее на клиенте (щелкните правой кнопкой мыши по агенту и запустите)
Это ошибка, которую я получаю в консоли отладки Java при запуске агента в клиенте заметок (v9.0.1)
java.lang.NullPointerException
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:727)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:654)
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 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:453)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:434)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:181)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:170)
at JavaAgent.NotesMain(Unknown Source)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
это параметры java.policy, которые я использую в своем клиенте Notes (и на некоторых серверах)
grant {разрешение java.util.PropertyPermission "http.keepAlive", "читать, писать"; };
grant {разрешение java.security.AllPermission; }
Вот код агента
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Database db = session.getCurrentDatabase();
lotus.domino.Document d = db.getView("inbox").getFirstDocument();
String url = d.getItemValueString("Subject");
Document x = Jsoup.connect(url).userAgent("Mozilla").get();
Elements p = x.select("p");
RichTextItem rt = (RichTextItem) d.getFirstItem("Body");
rt.appendText(p.text());
d.replaceItemValue("Processed", "1");
d.save();
} catch(Exception e) {
e.printStackTrace();
}
}}
Как я могу заставить агента работать на моем локальном клиенте Notes?
Прочтите это: Ошибки подключения HTTP-агента Java-агента
Это решило проблему для меня.
После многих перезапусков и перетаскиваемых настроек, а также много вытягивания волос, я смог найти набор шагов, которые могли бы вызвать проблему или предотвратить ее. Чтобы заставить код работать:
- Откройте клиент Notes
- Запустить агент Java
- Работает HTTP-соединение
Чтобы получить ошибку:
- Откройте клиент Notes
- Откройте консоль отладки Java
- Запустить агент Java
- Не удалось выполнить HTTP-соединение
Что-то об открытии Java Debug Console перед запуском агента, который заставляет Notes использовать COM.ibm.JEmpower.applet.http.HttpURLConnection, чтобы установить соединение вместо sun.net.www.protocol.http.HttpURLConnection и Версия класса JEmpower - это тот, который сломан (за каждое экспериментирование и APAR, упомянутые ранее).
Как ни странно, если я запустил агент, а затем откройте консоль отладки и снова запустите агент, все будет в порядке. Это открытие консоли отладки, прежде чем я сделаю все, что вызывает проблемы.