@Martin: Was dort unter "Basiswissen" verlinkt ist, weiss ich btw. auch nicht in allen Details. Liest du das wirklich ?
SoapWebservices wäre eine Möglichkeit, allerdings kommt das schwer aus der Mode. Einfach zu viel overkill. Es sei denn du brauchst irgendeine ernsthafte Transaktionsfähigkeit, die dir Domino eh nicht liefert.
Zunächst einmal mußt du aus Java heraus einen Http Request absetzen.
hier ist ein Beispiel, wie du ein xml Dokument an einen beliebigen Server schicken kannst.
Das bietet dir zumindest die größte Flexibilität an.
Im Beispiel ist das ein soap Dokument. Es kann aber egal was sein (ausser binary, das geht aber auch). Also einfach einen String. Oder JSon. Oder normales xml (also nicht von irgendwelchen SOAP-Standardisierungs-Clowns ausgearbeites).
Auf der Domino Seite kannst du im Agenten den Inhalt des request in LotusScript so bekommen:
req=doc.Request_Content(0)
Javaauf der Client Seite (dein Java Programm)
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
public class DoPost {
/**
* @param args
* @throws IOException
* @throws HttpException
*/
public static void main(String[] args) throws HttpException, IOException {
String body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><soapenv:Body><theName xmlns=\"urn:DefaultNamespace\">Lotus</theName></soapenv:Body></soapenv:Envelope>";
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("http://127.0.0.1:80/Axel/MyWebService.nsf/MyWebService");
RequestEntity bodyEntity = new StringRequestEntity(body, "utf-8", null);
//post.setFollowRedirects(true);
String proxyHost = "";
int proxyPort =0 ;
String proxyUser = "";
String proxyPwd = "";
String host = "127.0.0.1";
//String host = "";
int port = 80;
String hostUserName = "axel janssen";
String hostPwd = "udontcare";
if (proxyHost.length() > 0) {
DoPost.initProxy(client, proxyHost, proxyPort, proxyUser, proxyPwd);
}
if (host.length() > 0 ) {
DoPost.initHostAuth(client, host, port, hostUserName, hostPwd);
}
post.setRequestEntity(bodyEntity);
post.addRequestHeader("Content-Type", "text/xml; charset=utf-8");
//post.addRequestHeader("Accept", "application/soap+xml, application/dime, multipart/related, text/*");
//post.addRequestHeader("User-Agent", "Axis/1.4");
//post.addRequestHeader("Host", "192.168.0.61:8080");
//post.addRequestHeader("Cache-Control","no-cache");
//post.addRequestHeader("Pragma", "no-cache");
//post.addRequestHeader("SOAPAction", "");
int result = client.executeMethod(post);
System.out.println ("result=" + result);
String ret = post.getResponseBodyAsString();
System.out.println ("ret=" + ret);
}
private static void initProxy(HttpClient client, final String proxyHost, final int proxyPort,
final String proxyUser, final String proxyPwd) {
client.getHostConfiguration().setProxy(proxyHost, proxyPort);
HttpState state = client.getState();
AuthScope authScope = new AuthScope(proxyHost, proxyPort,
AuthScope.ANY_REALM);
state.setProxyCredentials(authScope, new UsernamePasswordCredentials(
proxyUser, proxyPwd));
client.getParams().setAuthenticationPreemptive(true);
}
/**
* Authentification for remote service.
* @param host remote host
* @param port remote port
* @param hostUserName remote user
* @param hostPwd remote password
*/
private static void initHostAuth(HttpClient client, final String host, final int port,
final String hostUserName, final String hostPwd) {
HttpState state = client.getState();
AuthScope authScope = new AuthScope(host, port, AuthScope.ANY_REALM);
state.setCredentials(authScope, new UsernamePasswordCredentials(
hostUserName, hostPwd));
client.getParams().setAuthenticationPreemptive(true);
}
}
Die Werte für initProxy Methode benötigst du, wenn zwischen deinem JavaProgramm und dem Domino Server ein reverse proxy steht. (etwas wo man sich anmelden muß, wenn man ins Internet muß).
initHostAuth ist für Authentifzierung am Server, wenn also der Zugriff des Agenten eine Authentifizierung benötigt (default, anonymous stehen auf kein Zugriff).
Du benötigst dafür folgende jars:
commons-httpclient-3.1.jar
commons-logging-1.1.jar
commons-codec-1.3.jar
Du kannst aber auch einfach Post Felder schicken. Check die API von CommonsHttpClient "PostMethod".
Get ginge auch, aber das ist inhaltlich nun mal einfach kein get.
Gruß Axel
hoffe es hilft
Stell Fragen, falls dir etwas unklar ist.