Ich versuche, auf einen PluginService in Content Navigator über meine Java-Anwendung zuzugreifen (Event Action Handler in FileNet P8). Die Anwendung verwendet den JAXRS-Anmeldedienst, um die security_token
vom Content Navigator-Server zu empfangen. Wenn ich jedoch versuche, den PluginService aufzurufen, erhalte ich eine Antwort, dass mein Login abgelaufen ist.In Content Navigator von externer Anwendung aus anmelden
Ich bin in der Lage, die Sicherheitstoken zu erhalten, wie in diesem Codeblock beschrieben:
URL logonUrl = new URL("http://icn-host:9081/jaxrs/logon"
+ "?userid=user"
+ "&password=password"
+ "&desktop=admin"
+ "&contextPath=%2Fnavigator");
HttpURLConnection logonConnection = (HttpURLConnection)logonUrl.openConnection();
logonConnection.setRequestMethod("POST");
logonConnection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
logonConnection.setDoOutput(true);
InputStream logonResponse = logonConnection.getInputStream();
String responseText = IOUtils.toString(logonResponse, "UTF-8")
.replaceFirst("^\\{}&&", "");
JSONObject responseJson = JSONObject.parse(responseText);
return (String)responseJson.get("security_token");
Aber wenn ich versuche, einen anderen Antrag zu machen, bekomme ich eine Fehlermeldung:
URL requestUrl = new URL("http://icn-host:9081/plugin.do"
+ "?plugin=myPlugin&action=myPluginService&myRequestProps=foobar");
HttpURLConnection requestConnection =
(HttpURLConnection)requestUrl.openConnection();
requestConnection.setRequestMethod("GET");
String securityToken = getSecurityToken(); // calls above code
requestConnection.setRequestProperty("security_token", securityToken);
equestConnection.setDoOutput(true);
InputStream responseStream = requestConnection.getInputStream();
String responseText = IOUtils.toString(responseStream, "UTF-8")
.replaceFirst("^\\{}&&", "");
log.info("response was: " + responseText);
Ich bekomme immer folgende Antwort:
{
"messagesEncoded":true,
"errors": [
{
"adminResponse":null,
"moreInformation":null,
"explanation":"Your session expired because of inactivity.",
"number":"1003",
"userResponse":"Log in again.",
"text":"Your session expired."
}
]
}
Ich habe auch versucht, die Cookies zu setzen, aber keinen Erfolg.
java.net.CookieManager cookieManager = new java.net.CookieManager();
Map<String, List<String>> headerFields = logonConnection.getHeaderFields();
List<String> cookiesHeader = headerFields.get("Set-Cookie");
if (cookiesHeader != null) {
for (String cookie : cookiesHeader) {
cookieManager.getCookieStore().add(null, HttpCookie.parse(cookie).get(0));
}
}
// ...
StringBuilder cookieHeader = new StringBuilder();
List<HttpCookie> cookies = cookieManager.getCookieStore().getCookies();
for (int i = 0; i < cookies.size(); i++) {
if (i > 0) {
cookieHeader.append(";");
}
HttpCookie cookie = cookies.get(i);
log.info("Cookie " + i + ": " + cookie.toString());
cookieHeader.append(cookie.toString());
}
requestConnection.setRequestProperty("Cookie", cookieHeader.toString());
Ich habe versucht, die Anfrage mit XMLHttpRequest in einem Content-Navigator-Fenster zu replizieren und es funktioniert wie erwartet:
var xhr = new XMLHttpRequest();
xhr.open("GET", "plugin.do" +
"?plugin=myPlugin" +
"&action=myPluginService" +
"&myRequestProps=foobar");
xhr.setRequestHeader("security_token", ecm.model.Request._security_token);
xhr.send();
Content Navigator und FileNet auf separaten WebSphere-Instanzen installiert sind. Ist es möglich, eine gemeinsame Bibliothek zwischen ihnen zu haben? –
Definitiv. ["Shared libraries"] (https://www.ibm.com/support/knowledgecenter/de/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/tcws_sharedlib_create.html) ermöglicht es Ihnen, ein Dienstprogramm zu verknüpfen .jar zum Klassenlader von sowohl Ihrer FilenetEngine.ear als auch Ihrer Navigator.ear. –