Autor Thema: Java Programm soll Daten an Agenten weitergeben über url  (Gelesen 4460 mal)

Offline Dogmi

  • Frischling
  • *
  • Beiträge: 14
Naja wie schon beschrieben, ich haben ein Java-Programm, wo ich mittels URL eine DBView mit ?readViewEntries auslese, das funktioniert und wird alles angezeigt. Nun zum Problem: gibt es einen weg geänderte Daten von meinen Java Programm über url zurückzuschreiben.

Über die Notes jar ist das ja kein Problem, aber das kann ja jeder, ausserdem müsste der DIIOP Task laufen.

Meine überlegung ist folgendes:

ich will per url einen agenten starten, der mir dann die daten in die DB schreibt, nur leider weis ich nicht, wie man die daten (also den feldnamen, Dbname usw) mitgibt. bin da leider noch recht unerfahren was das angeht.

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Java Programm soll Daten an Agenten weitergeben über url
« Antwort #2 am: 07.04.09 - 19:43:58 »
@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:
Code
req=doc.Request_Content(0) 


Javaauf der Client Seite (dein Java Programm)
Code
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.

« Letzte Änderung: 07.04.09 - 20:09:59 von Pitiyankee »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Java Programm soll Daten an Agenten weitergeben über url
« Antwort #3 am: 07.04.09 - 22:31:33 »
@Martin: Was dort unter "Basiswissen" verlinkt ist, weiss ich btw. auch nicht in allen Details. Liest du das wirklich ?
Verdiene seit 10+ Jahren mein Geld damit, sowas zu wissen.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Java Programm soll Daten an Agenten weitergeben über url
« Antwort #4 am: 08.04.09 - 08:41:17 »
Ab einer gewissen Detailtiefe wird es willkürlich Wissen als Basiswissen zu determinieren.  ;D
Für vieles gibts einfach frameworks.

Sehr hilfreich für solche Projekte ist btw. auch noch ein TCP Monitor, der die ausgetauschten Nachrichten anzeigt.
Ich verwende dafür gerne tcpmon aus axis.
http://readmymusings.blogspot.com/2005/12/axis-tcpmon-tool-usage.html
« Letzte Änderung: 08.04.09 - 08:44:41 von Pitiyankee »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Dogmi

  • Frischling
  • *
  • Beiträge: 14
Re: Java Programm soll Daten an Agenten weitergeben über url
« Antwort #5 am: 08.04.09 - 09:49:11 »
jo, ich bedanke mich erstmal für den vielen input, werd mir das mal anschauen und verdauen, wenn ich fragen hab, meld ich mich  ;)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz