In HTTP Client sind Beispiele dabei. Du brauchst einen GET Request.
Hier noch ein wenig Code von mir allerdings für einen Post Request mit ein paar Besonderheiten. Hab Kommentare reingeschrieben:
ProxyAuthConfig und HostAuthConfig sind einfach ein paar JavaBeans (Java Klassen mit gettern und settern).
public InputStream excecute() throws ConfigurationException, HttpException,
IOException, HttpConnectionNotOkException {
if (url == null) {
throw new ConfigurationException("url must be set.");
}
if (bodyEntity == null) {
throw new ConfigurationException("body Entity is not filled");
}
HttpClient client = new HttpClient();
initProxyAuth(client, this.proxyAuthConfig);
initHostAuth(client, this.hostAuthConfig);
PostMethod postMethod = new PostMethod(url);
// wirst du nicht brauchen - Start
Iterator itKey = httpHeader.keySet().iterator();
while (itKey.hasNext()) {
String headerName = itKey.next().toString();
String headerValue = httpHeader.get(headerName).toString();
postMethod.addRequestHeader(headerName, headerValue);
}
postMethod.setRequestEntity(bodyEntity);
// wirst du nicht brauchen ENDE
int ret = client.executeMethod(postMethod); // request abfeuern
if (ret != 200) {
String retAsString = postMethod.getResponseBodyAsString();
throw new HttpConnectionNotOkException("Return code was: " + ret + "\nmsg=" + retAsString);
}
InputStream is = postMethod.getResponseBodyAsStream();
return is;
}
private void initProxyAuth(HttpClient client, ProxyAuthConfig config) {
if (config != null) {
client.getHostConfiguration().setProxy(config.getHost(),
config.getPort());
HttpState state = client.getState();
AuthScope authScope = new AuthScope(config.getHost(), config
.getPort(), AuthScope.ANY_REALM);
state.setProxyCredentials(authScope,
new UsernamePasswordCredentials(config.getUser(), config
.getPwd()));
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 void initHostAuth(HttpClient client, HostAuthConfig config) {
if (config != null) {
HttpState state = client.getState();
AuthScope authScope = new AuthScope(config.getHost(), config
.getPort(), AuthScope.ANY_REALM);
state.setCredentials(authScope, new UsernamePasswordCredentials(
config.getUser(), config.getPwd()));
client.getParams().setAuthenticationPreemptive(true);
}
}
/// der aufrufende Code von excecute in einer anderen Klasse.
private Object sendSoap(String body) throws HttpException,
ConfigurationException, IOException, HttpConnectionNotOkException,
JDOMException {
Object ret = null;
String strMsg = "Module " + agtModule + ", sendSoap():";
InputStream is = null;
// 2. soap an Server, response
post = new DoPost();
// Set the SOAP action and security
post.setUrl(SOAPUrlTarget + SOAPUrlParams);
post.setProxyAuth(wsProxyAuth);
post.setHostAuth(wsHostAuth);
// Set the Body, generated for each document
post.setBodyEntity(body);
post.addHttpHeader("Content-Type", "text/xml; charset=utf-8");
post.addHttpHeader("Accept",
"application/soap+xml, application/dime, multipart/related, text/*");
post.addHttpHeader("User-Agent", "Axis/1.4");
post.addHttpHeader("Cache-Control", "no-cache");
post.addHttpHeader("Pragma", "no-cache");
post.addHttpHeader("SOAPAction",
"http://sap.com/xi/WebService/soap1.1");
// SPIErrorHandler.logAction(strMsg + " Post object: \t" +
// post.toString(), dbCurrent);
try {
is = post.excecute();
// 3. soapResponse verarbeiten.
SoapSapToBean parser = new SoapSapToBean();
// SoapToString bean = new SoapToString(); -> for debug purposes
/**
* The Response bean contains the jdom xpath results of the SOAP
* return message
*/
ResponseBean bean = new ResponseBean();
ret = parser.process(is, bean);
is.close();
is = null;
} finally {
/*
* It is very urgent to close the stream in a controlled way, to
* avoid problems on the OS
*/
if (is != null) {
try {
is.close();
} catch (java.io.IOException ioe) {
//ioe.printStackTrace();
SPIErrorHandler.handleError(ioe.toString(), dbCurrent);
}
} // end if
}
// transfer the SOAP result to the next level
return ret;
}
Nicht vergessen den InputStream in der aufrufenden Methode im finally zu schliessen!
Den InputStream kannst du dann in ein File schreiben. Oder einen StringWriter. In meinem Fall übergeb ich es an ein selbstgeschriebenes XML-To-Bean Framework. Was auch immer.
Zum Testen kannst du auch erstmal einen String zurückgeben. Wie in dem Exception-Zweig von dem excecute:
String retAsString = postMethod.getResponseBodyAsString();
Gibt natürlich ein Sicherheitsproblem. Um dich am Domino Server zu autorisieren, eine Mail-NSF zu lesen, musst du Leserechte auf sie haben. Bei deiner Mailbox sollte das kein Problem darstellen. Gilt aber nicht unbedingt für die Mailboxen anderer Leute. Du kannst username / pwd eines Users einer Admingruppe nehmen. Aber der sollte auch nicht so allgemein bekannt sein.
Möglich ist etwa dir mit Bouncy-Castle Code ein bischen Verschlüsselungscode zu basteln. Dann können Passwortkundige dieses Superusers das Passwort verschlüsselt speichern. Falls du mit einem JSR168/286 Portalserver arbeitest gibts da weitere Single Sign On und sonstige Möglichkeiten. Aber das ist eigentlich schon das nächste Thema.
Frag mich, wenn du was nicht verstehst. Möglicherweise mußt du HTTP redirects folgen. Wird von HTTPClient unterstützt. Versuch google
follow redirects HttpClient
Das Beispiel ist mit HTTP-Post. Du brauchst GET. Aber das ist sehr ähnlich. Schau in die API oder die Beispiele, die bei HTTP Client dabei sind.
Gruß