# ArrayList via WebService übertragen



## HFT (4. Apr 2011)

Hallo zusammen,

für eine Anwendung wollen wir auf eine Datenbank zugreifen. Der Zugriff auf die Datenbank soll als Webservice via RPC zur Verfügung stehen. 

Unsere Idee war die Ergebnisse aus dem Datenbankabruf (ID, Titel, Bilddaten ...) jeweils in ein Objekt (ResponseObject) zu schreiben und die Objekte wiederum in eine spezialisierte ArrayList zu schreiben.

Die ArrayList sieht also folgendermaßen aus: ArrayList<ResponseObject> Response = new ArrayList<ResponseObject> ();

Nun soll diese ArrayList als Returnwert des RPC über den WebService übertragen werden.

Ist das grundsätzlich möglich, oder müssen wir eine andere Möglichkeit verwenden um die Daten auf die Clients zu übertragen. 
Bei unseren Testläufen bekamen wir auf Client-Seite nur die Speicheradresse zurück (denken wir zumindest), an der die ArrayList liegt. Ein Zugriff auf die Liste ist nicht möglich.

Nur ein String ist nicht möglich, da in der Datenbank auch Bilder abgespeichert sind und ein String zu kurz wäre. 

Sorry, dass ich hier keinen SourceCode einstelle, aber ich habe gerade keinen Zugriff auf diesen.

Wenn ihr noch weitere Angaben braucht um uns helfen zu können (ich weiß, es ist sehr schwammig formuliert - ich weiß aber nicht, wie ich mich genauer ausdrücken soll --> Anfänger), dann lasst es mich wissen.

Vielen Dank schon einmal im Voaraus für die Hilfe.

MfG HFT


----------



## Niki (4. Apr 2011)

gib statt der ArrayList einfach ein Array von den Objekten zurück. Dynamische Collections funktionieren afaik nicht. Das Umwandeln von ArrayList zu Array ist aber keine hexerei:


```
List<String> myList = new ArrayList<String>();
myList.add("foobar");
String[] myArray = new String[myList.size()];
myList.toArray(myArray);
```


----------



## HFT (4. Apr 2011)

Danke NiKi für die schnelle Antwort!

Das Problem ist, dass ich aus der Datenbank nicht nur Strings, sondern auch Boolean und Blob bekomme.

Insofern kann ich ja nicht einfach ein Array<String> nehmen kann. Deshalb haben wir ein Objekt angelegt, in dass ich alle Daten aus der Datenbank speichern kann (ein Objekt für eine Anwort-"Zeile").

Um alle Antwort-Sätze auf einmal zu übertragen sollten die einzelnen Objekte  ja dann in einer ArrayList<ResponseObject> abgelegt und übergeben werden.


```
public static ArrayList<ResponseObject> read (String Query, ArrayList<ResponseObject> Response){

//[...] Verbindung zur Datenbank

           ResponseObject DBdata = new ResponseObject();
	    try {

            java.sql.ResultSet res = state.executeQuery(Query);
            
            
            while (res.next()) {
                
            	/**Aktuelle Datenbankantwort in Objekt schreiben**/ 
            	DBdata.id = res.getString("id");
                DBdata.title = res.getString("title");
                DBdata.subtitle = res.getString("subtitle");
                DBdata.page = res.getBoolean("page");
                DBdata.content = res.getString("content");
                DBdata.logo = res.getBlob("logo");
                DBdata.picture = res.getBlob("picture");
                DBdata.link = res.getString("link");
                
                /**Befülltes Objekt in ArrayList schreiben**/
                
                Response.add(DBdata);

                
            }//while

return Response;
```

Das ResponseObject sieht folgendermaßen aus:


```
public class ResponseObject {
	
	String id = "";
    String title = "";
    String subtitle = "";
    boolean page = false;
    String content = "";
    Blob logo;
    Blob picture;
    String link = "";
	
    
    
    public ResponseObject() {
		super();
	}



	public ResponseObject(String id, String title, String subtitle,
			boolean page, String content, Blob logo, Blob picture, String link) {
		super();
		this.id = id;
		this.title = title;
		this.subtitle = subtitle;
		this.page = page;
		this.content = content;
		this.logo = logo;
		this.picture = picture;
		this.link = link;
	}
}
```

Wenn das Zurückgeben mit den dynamischen Collections nicht geht, wie kann ich  das sonst machen?

Oder muss ich erst alles in Strings umwandeln? Geht das mit Blobs überhaupt?

MfG HFT


----------



## Niki (4. Apr 2011)

ich weiß, das war ja nur ein beispiel wie man aus einer arraylist ein array macht. du brauchst natürlich ein array von deinen response objekten. und ja, mit blobs geht das auch, die werden als base64 zurück geliefert


----------

