# Model eines xml-downloads



## Gast2 (17. Nov 2011)

Moin!

Ich habe so was wie eine Hausaufgabe, 
naja, es ist eher Teil meiner Praktikumsaufgabe.

Seit zwei Tagen habe ich versucht, probiert, gegoogelt, gelesen und gelernt und komme aber nicht wirklich weiter.

Folgendes Problem:
Es gibt eine recht umfangreiche Anwendung welche u.A. über einen fremden Server eine XML erhält. Diese XML soll dann später verarbeitet werden (was auch meine Aufgabe sein wird).

Da ich meine Aufgabe natürlich in die bestehende Anwendung einpassen muss,
sollte ich auch mit den selben Daten wie die bestehende Anwendung arbeiten.
Darum dachte ich mir, baue ich mir ein Modell (eine Klasse), welches die selben Daten Empfängt, auf der gleichen Art und Weise (die XML via http).

Ich habe aus der bestehenden Anwendung mal den den entsprechenden Codeschnipsel rausgeholt, den ich für mein Modell anpassen will...

```
private byte[] getHttp() throws DataException, CommunicationException
	{
		try {
			HttpClient httpclient = new DefaultHttpClient();
			if (Config.getPreferences().getProxy().isUseproxy())
			{
				HttpHost proxy = new HttpHost(Config.getPreferences().getProxy().getHost(), Config.getPreferences().getProxy().getPort());
				httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
			}
			URI uri = URIUtils.createURI("http", Config.getPreferences().getVoo().getEfa().getTripRequest().getHost(), 
					Config.getPreferences().getVoo().getEfa().getTripRequest().getPort(), 
					Config.getPreferences().getVoo().getEfa().getTripRequest().getPath(), this.query, null);
			String xS = uri.toURL().toExternalForm();
			Config.log.info(uri);
			HttpGet httpget = new HttpGet(uri);
			HttpResponse response = null;
			response = httpclient.execute(httpget);
			HttpEntity entity = response.getEntity();
			if (entity != null) 
			{				
				return EntityUtils.toByteArray(entity);
			}
		} catch (URISyntaxException e) {
			Config.log.error("ERROR", e.fillInStackTrace());
		} catch (ClientProtocolException e) {
			Config.log.error("ERROR", e.fillInStackTrace());
		} catch (IllegalStateException e) {
			Config.log.error("ERROR", e.fillInStackTrace());
		} catch (IOException e) {
			Config.log.error("ERROR", e.fillInStackTrace());
		}
	return null;
}
```
Die Geschichte mit dem Proxy brauch ich vorraussichtlich nicht, so dass diese 5 Zeilen entfallen.

Ich kann via Scanner und StringBuilder die XML einlesen, aber dann sieht das Ergebnis anders aus. Wie im Codeschnipsel zu sehen ist, soll ein Byte-Typ zurückkommen (wie auch immer ich diesen weiter verarbeiten soll...

Wenn ich diesen obigen Code benutzen will,
dann stosse ich schnell auf Probleme.

Die ersten und augenscheinlichsten und zur Zeit größten Probleme sind:

Wie kann ich URI uri = URIUtils.createURI(...) ersetzen durch meine Beispiel URL (String url = "http://tut.voo-online.de:8080/voo/XML_TRAP_REQUEST2?use...") <- (geänderte URL)? Hierbei komme ich in Konflikt mit dem Typ (denke ich).
Ich möchte ohne die Klasse Config auskommen. Diese Klasse ist ein Monster (von der Größe her) und diese noch anzupassen wäre zu viel Arbeit. Aber wie kann ich dieses Objekt ersetzen, bzw. was läßt sich tun, um aus der URL das selbe Ergebnis zu bekommen?

Ich wäre sehr dankbar über Hilfe, 
auch über Hilfe zur Selbsthilfe
(also für jede und alles). :bahnhof:

Frank

PS: mein auf's (vorerst) Wesentliche zusammengekürzter Code:

```
private byte[] getHttp() throws CommunicationException	// DataException, 
		{
			try {
				HttpClient httpclient = new DefaultHttpClient();
				
				URI uri = URIUtils.createURI("http", Config.getPreferences().getVoo().getEfa().getTripRequest().getHost(), 
						Config.getPreferences().getVoo().getEfa().getTripRequest().getPort(), 
						Config.getPreferences().getVoo().getEfa().getTripRequest().getPath(), this.query, null);
				String xS = uri.toURL().toExternalForm();
				Config.log.info(uri);
				HttpGet httpget = new HttpGet(uri);
				HttpResponse response = null;
				response = httpclient.execute(httpget);
				HttpEntity entity = response.getEntity();
				if (entity != null) 
				{					
					return EntityUtils.toByteArray(entity);
					
				}
			} catch (URISyntaxException e) {
				System.out.println("Fehler 1");
			} catch (ClientProtocolException e) {
				System.out.println("Fehler 2");
			} catch (IllegalStateException e) {
				System.out.println("Fehler 3");
			} catch (IOException e) {
				System.out.println("Fehler 4");
			}
			return null;

		}
```


----------



## Gast2 (17. Nov 2011)

Meine Lösung (vorerst, Dauer des Programmablaufs liegt bei über drei Sekunden = zu lang):

```
public byte[] getHttp() throws CommunicationException
		{
			try {
				HttpClient httpclient = new DefaultHttpClient();				
				String url = "http://...";
				HttpGet httpget = new HttpGet(url);
				HttpResponse response = null;
				response = httpclient.execute(httpget);
				HttpEntity entity = response.getEntity();
				if (entity != null) 
				{	return EntityUtils.toByteArray(entity);	}
			} catch (ClientProtocolException e) {
				System.out.println("Fehler 2");
			} catch (IllegalStateException e) {
				System.out.println("Fehler 3");
			} catch (IOException e) {
				System.out.println("Fehler 4");
			}
			return null;
		}
```


----------



## AlexSpritze (17. Nov 2011)

frankmehlhop hat gesagt.:


> Meine Lösung (vorerst, Dauer des Programmablaufs liegt bei über drei Sekunden = zu lang):



Hast du mal durchdebuggt um zu sehen, wo das Programm diese >drei Sekunden vertrödelt? Oder die URL über einen Browser aufgerufen, vielleich ist ja auch der Server einfach nur so langsam?


----------

