Autor Thema: Werte aus XML-Datei lesen  (Gelesen 5234 mal)

Offline aretni

  • Frischling
  • *
  • Beiträge: 8
  • Geschlecht: Männlich
Werte aus XML-Datei lesen
« am: 08.04.08 - 11:54:11 »
Hallo,

Ich möchte den aktuellen Währungkurs von http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate?FromCurrency=USD&ToCurrency=EUR auslesen (in dem Beispiel, aktuellen Dollar Kurs) und Notes zur Verfügung stellen.
Wie mache ich das am besten in Java? Hat jemand vielleicht sowas schon mal programmiert und könnte mir ein Beispiel zukommen lassen?

Vielen Dank im voraus.

Gruß

Aretni

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Werte aus XML-Datei lesen
« Antwort #1 am: 08.04.08 - 13:25:43 »
Ich präferiere Jakarta Commons HTTPClient.
Eigentlich besteht die Aufgabe aus 2 Teilen:
1. XML als Stream herunterladen
2. Mit einer XML-Api das XML auslesen.

Hier ist ein code Ausschnitt für das herunterladen mit HTTPClient von jakarta commons:
Code
	/**
	 * Downloads remote resource as Stream.
	 * 
	 * @param url
	 *            url of remote resource.
	 * @return stream of remote resource, not closed here.
	 * @throws SpiHttpConnectionException
	 *             HTTP connection problems.
	 */
	private InputStream connect(final String url)
			throws SpiHttpConnectionException {
		Clogging.debug(getClass().getName() + ".connect(" + url + ")");
		// Create a method instance.
		method = new GetMethod(url);
		method.setFollowRedirects(true);
		// Provide custom retry handler is necessary
		method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
				new DefaultHttpMethodRetryHandler(HTTP_RETRY, false));

		// Execute the method.
		int statusCode;
		try {
			statusCode = client.executeMethod(method);

			if (statusCode != HttpStatus.SC_OK) {
				String msg = StringUtils.replaceOnce(
						Constants.EXCEPTION_MSG_HTTP_STATUS,
						"{param}", "" + statusCode);
				msg = StringUtils.replaceOnce(msg, "{param}", method
						.getStatusLine().toString());
				Clogging.debug(msg);
				throw new SpiHttpConnectionException(msg);

			}
			return method.getResponseBodyAsStream();

		} catch (HttpException e) {

			throw new SpiHttpConnectionException(

			StringUtils.replace(Constants.EXCEPTION_MSG_HTTP,
					"{param}", url));

		} catch (IOException e) {
			throw new SpiHttpConnectionException(StringUtils.replace(
					Constants.EXCEPTION_MSG_IO, "{param}", url), e);

		}

	}

Für Schritt 2 empfehle ich die XPath features von JDom.

Gruß Axel

P.S.: Je konkreter die Fragen, desto zielführender die Antworten.
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 animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re: Werte aus XML-Datei lesen
« Antwort #2 am: 09.04.08 - 08:39:17 »
Eine ALternative wäre, dass Du Dir einen WebService Client aus der WSDL des Webservice (http://www.webservicex.net/CurrencyConvertor.asmx?wsdl) erzeugst/erzeugen lässt. Dann kommst Du gar nicht mehr mit XML in Kontakt.
Manche Java IDEs (ich kenne es von Netbeans) können Clients erzeugen, wenn man ihnen die WSDL gibt.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Werte aus XML-Datei lesen
« Antwort #3 am: 09.04.08 - 12:20:56 »
... wobei Client seitige Webservices erst ab Notes 8 unterstützt werden.
Vielleicht sollte ich meine Lösung wirklich mal öffentlich durchprogrammieren.

Die Vorteile sind:
- der generierte Code ist alles andere als einfach zu verstehen.
- mein Vorschläg funktioniert für SOAP und REST Webservices. Eine Erweiterung auf nicht-XML Formate (z.B. JSON, komma-separierte Listen, whatever) ist einfach. Sowohl REST als auch nicht-XML Formate für Webservices sind relativ weit verbreitet. Ich hab letztes Jahr einen Kunden mit dem Business News Dienst Factiva verbunden und die boten manche Webservices NUR als SOAP UND andere NUR als REST an, was ich übrigens merkwürdig fand.

Gruß Axel
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 aretni

  • Frischling
  • *
  • Beiträge: 8
  • Geschlecht: Männlich
Re: Werte aus XML-Datei lesen
« Antwort #4 am: 09.04.08 - 12:28:44 »
Da ich noch ein blutiger Anfänger bin, weiß ich nun nicht mehr weiter. Hab den Tipp mit der WSDL-Datei angenommen und folgendes kam raus:

Mein Agent:
#######
initialize:
Sub Initialize
   Call GetCurrency("USD")
End Sub
#######
GetCurrency:
Sub GetCurrency(waehrung As String)
   sWSDL = "http://www.webservicex.net/CurrencyConvertor.asmx?wsdl"
   Set Client =CreateObject("MSSOAP.SoapClient")
   Call Client.mssoapinit (sWSDL)
   result = Client.****
-------------------
Was trage ich nun hinter "Client." ein um z.B. den aktuellen Kurs vom US Dollar (USD) zu bekommen?
----------------
'Output result to message box   
   Messagebox result, MB_OK, "Get Currency"
End Sub
#########

Kann mir jemand bei dem Problem weiterhelfen?

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re: Werte aus XML-Datei lesen
« Antwort #5 am: 09.04.08 - 17:30:36 »
... wobei Client seitige Webservices erst ab Notes 8 unterstützt werden.

Ach so. Ja dann musst Du es zu Fuß programmieren, also wie Axel vorgeschlagen hat.
Ich habe gerade noch diesen Link gefunden, evtl hilft der weiter:

Consuming an external Web service with Domino 6
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Werte aus XML-Datei lesen
« Antwort #6 am: 09.04.08 - 19:15:25 »
Wenn man sich selber einmal ein solches Framework geschrieben hat, ist es
a) viel transparenter
b) braucht man keine code Generierungsaktionen mehr zu starten
c) funktioniert mit allen Typen von Webservices (also auch REST)
d) einfacher erweiterbar für andere Austauschformate wie JSON
e) kann mit Reverse Proxies umgehen (das, wenn man sich aus der Firma erstmal beim Proxy anmelden muss, wenn man ins Internet will)

Vielleicht stell ich das mal auf unseren Unternehmensblog. Dafür müsste ich aber die jetzigen Lösungen erst einmal konsolidieren und eine Erlaubnis dafür bekommen, das zu posten.

Gruß Axel
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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz