ОБНОВЛЕНИЕ 30 ОКТЯБРЯ, см. внизу вопроса.
Я создал рабочий образец автономного Java-приложения в Eclipse (на основе SBT sbt.sample.app GetAllCommunitiesApp.java. Единственное изменение заключается в том, что я вручную создаю свою BasicEndpoint, чтобы пропустить использование управляемых компонентов для настройки конечной точки (и таким образом чтение manage-beans.xml) Как сказано, все это прекрасно работает в Eclipse.
Перемещая код в локальный агент Notes Java (агент помещается в локальную базу данных), я в первую очередь скопировал JAR-файлы SBT в свой C:\Program Files (x86)\IBM\Lotus\Notes\jvm\lib\ext каталог. См. ниже список этих файлов. Когда я запускаю агент Java, я получаю следующую трассировку стека;
Exception in thread "AgentThread: JavaAgent" java.lang.NoSuchMethodError: org/apache/http/protocol/BasicHttpContext.<init>()V
at org.apache.http.impl.client.AbstractHttpClient.createHttpContext(AbstractHttpClient.java:285)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:851)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
at com.ibm.sbt.services.client.ClientService.executeRequest(ClientService.java:1043)
at com.ibm.sbt.services.client.ClientService._xhr(ClientService.java:1006)
at com.ibm.sbt.services.client.ClientService.execRequest(ClientService.java:972)
at com.ibm.sbt.services.client.ClientService.xhr(ClientService.java:932)
at com.ibm.sbt.services.client.ClientService.get(ClientService.java:808)
at com.ibm.sbt.services.client.ClientService.get(ClientService.java:804)
at com.ibm.sbt.services.client.base.BaseService.retrieveData(BaseService.java:350)
at com.ibm.sbt.services.client.base.BaseService.retrieveData(BaseService.java:372)
at com.ibm.sbt.services.client.base.BaseService.retrieveData(BaseService.java:325)
at com.ibm.sbt.services.client.base.BaseService.getEntities(BaseService.java:185)
at com.ibm.sbt.services.client.connections.communities.CommunityService.getMyCommunities(CommunityService.java:265)
at com.ibm.sbt.services.client.connections.communities.CommunityService.getMyCommunities(CommunityService.java:249)
at no.tine.sbt.SBTCommunityHelper.getMyCommunities(SBTCommunityHelper.java:36)
at JavaAgent.NotesMain(JavaAgent.java:27)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
Searching StackOverflow and other sites shows that others has seen similar problems with mixed versions of Apache's HttpClient (typically people has been using httpclient 4.0.1, and the problem went away replacing it with httpclient 4.1). The SBT includes httpclient-4.2.1.jar is that file is what I have copied to Lotus Notes's C:\Program Files (x86)\IBM\Lotus\Notes\jvm\lib\ext.
Мне кажется, что Lotus Notes каким-то образом использует какой-то другой httpclient откуда-то, который, возможно, устарел.
Итак, вопрос в том, могу ли я каким-то образом заставить Notes использовать банки SBT? Есть идеи?
Для справки, JAR-файлы SBT, которые я скопировал в свой C:\Program Files (x86)\IBM\Lotus\Notes\jvm\lib\ext:
com.ibm.commons-1.0.0.20131024-1349.jar
com.ibm.commons.runtime-1.0.0.20131024-1349.jar
com.ibm.commons.xml-1.0.0.20131024-1349.jar
com.ibm.sbt.core-1.0.0.20131024-1349.jar
com.ibm.sbt.playground-1.0.0.20131024-1349.jar
apache-mime4j-0.6.jar
com.ibm.sbt.javamail-1.4.5.jar
commons-codec-1.3.jar
commons-fileupload-1.2.2.jar
commons-io-2.4.jar
commons-logging-1.1.1.jar
httpclient-4.2.1.jar
httpcore-4.2.1.jar
httpmime-4.2.1.jar
ОБНОВЛЕНИЕ 30 ОКТЯБРЯ 2013 г. - Найден образец, который, возможно, идет по тому же пути. Следующий код представляет собой полный агент Notes Java с основным кодом непосредственно из примера кода Apache.org HttpClient 4.2. Это также генерирует NoSuchMethodError и, возможно, его легче отлаживать, чем SBT.
/*
* Sample retrieved from
* http://hc.apache.org/httpcomponents-client-4.2.x/httpclient/examples/org/apache/http/examples/client/ClientWithResponseHandler.java
*/
import java.io.IOException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import lotus.domino.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
HttpClient httpclient = new DefaultHttpClient();
try {
HttpGet httpget = new HttpGet("http://www.google.com/");
System.out.println("executing request " + httpget.getURI());
// Create a response handler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
System.out.println("----------------------------------------");
System.out.println(responseBody);
System.out.println("----------------------------------------");
} finally {
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
// Notes Exception catcher
} catch(Exception e) {
e.printStackTrace();
}
}
}