# web services mit mega-anhang



## lotta (22. Feb 2005)

hallo!! ich habe auch schon in 'Enterprise Java' geposted, aber vielleicht ist meine Frage hier besser aufgehoben...

Ich möchte einen web service implementieren, der ein XML file vom service zum client überträgt. Dieses XML-file kann aber u.U. bis zu 15MB gross sein... Jetzt frag ich mich, wie ich das am elegantesten lösen kann. Vielleicht über Soap with Attachments? Oder ist das Performanz-technisch gar nicht so ein grosses Problem? Alles was ich zu SOAP-Performance gefunden habe... das sah nicht so gut aus icon_confused.gif
Vielleicht habt ihr ja Ideen oder einen Ansatz für mich, wie ich das trotzdem mit web services realisieren kann??

Vielen Dank und alles Gute,

lotta


----------



## foobar (22. Feb 2005)

Probier es doch einfach aus, dann weißt du es ;-)


----------



## lotta (22. Feb 2005)

hm. vielleicht hat jemand auch noch ne konstruktive Antwort??
Wenn ich in der Lage wäre, das eben mal einfach auszuprobieren hätte ich das sicher getan...

etwas zerknirschter gruss,
lotta


----------



## foobar (23. Feb 2005)

Anonymous hat gesagt.:
			
		

> hm. vielleicht hat jemand auch noch ne konstruktive Antwort??



Lies die Axis-Dokumentation und erstelle ein paar kleine Webservices. Falls du dabei auf ein konkretes Problem stößt, kannst du das hier gerne posten.


----------



## Bleiglanz (23. Feb 2005)

>>Oder ist das Performanz-technisch gar nicht so ein grosses Problem?

doch, hängt vom Toolkit ab, wenn der Endpoint DOM verwendet kannst du ein 15MB XML Dokument vergessen, wenn er mit SAX arbeitet dürfte es keine Probleme gaben

aber: 15MB zu parsen dauert sicher seine Zeit, das hat weder mit SOAP noch mit Webservices etwas zu tun

SOAP mit Attachments hätte den Vorteil, dass der Endpoint selbst den "Lastteil" erst mal gar nicht parsen muss (sondern gleich als File ablegen kann) => ist unter Umständen besser...

kommt ganz drauf an was  du willst, Webservices sind zum RPC da, und eine Funktion mit einem 15MB grossen Argument ist da nicht direkt vorgesehen -> was willstn überhaupt machen?


----------



## lotta (23. Feb 2005)

Hallo foobar, hallo Bleiglanz,
vielen Dank für eure Antworten. 

>>was willstn überhaupt machen?

Also es handelt sich um meine Diplomarbeit und ich bin, zugegeben, noch etwas planlos.. Ich hab mich noch nie mit web services beschäftigt und weiss einfach nicht so recht, wie ich da ran gehen soll. 
Es soll im theoretischen Teil der web service konzeptioniert werden, also eine genaue Spezifikation der Anforderungen mit dem Resultat, dass daran anlehnend anschliessend der web service implementiert werden kann. Typisch Diplomarbeit eben 
Der web service soll kein öffentlicher werden, sondern nur zugänglich für bestimmte Clients. Ein Client soll über ne GUI ein Dokument anfordern können, welches Informationen enthält, die vorher vom Benutzer des Clients gewählt wurden. Wenn der Client das gesamte XMLfile anfordert, das übrigens auf der Platte gespeichert und für den service zugreifbar ist, dann sind das etwa 15MB. Ausserdem soll der Client auch noch 'konfigurierbar' sein, also es soll ein zielverzeichnis angegeben werden können, in dem das XMLfile dann gespeichert wird, und es soll zusätzlich möglich sein, auch andere Dateiformate (HTML, XHTML) anzufordern. Soviel zum Client. 
Der service soll auf BEA application server laufen und eine solche Anfrage eben verarbeiten können, und die Informationen, die angefordert werden, aus dem riesen-xml-file extrahieren, in ein Response-XML-file packen und an den Client zurückschicken. Wenn das XML-file angekommen ist, wird es entweder nur gespeichert, oder noch in HTML und/oder XHTML transformiert.

War das verständlich? ich hoffe...
Naja, und ich bin jetzt an einem Punkt, wo ich nicht mehr weiss, wie der Weg ist.. Ich hab viel gelesen über web services, finde mich aber in dem Dschungel der verschiedenen Möglichkeiten nicht zurecht. Ausserdem, wie genau spezifiziert man ein zu entwickelndes System? 
Vielleicht erinnert ihr euch ja noch an diese verfluchte diplomarbeits-zeit und habt den ein oder anderen Tipp für mich?

 aber es war gut, darüber geredet zu haben 

lotta


----------



## Bleiglanz (23. Feb 2005)

lies erstmal die WSDL und SOAP Kapitel in

J2EE Web Services. The Ultimate Guide.
von Richard Monson-Haefel

soooo schwierig ist das alles auch nicht, deine Spec besteht ja im wesentlichen in der Beschreibung einer Funktion, d.h. du beschreibst die Übergabeparameter und das Ergebnis....

zu der 15MB XML Datei auf der Platte kann ich nur sagen: das wird problematisch:

ein EJB Endpoint kann nicht auf das dateisystem zugreifen, also muss ein Servlet Endpoint her, aber auch der wird ziemlich übel aussehen, wenn er bei jedem Aufruf die ganze Datei parsen muss und das richtige für den Client raussuchen soll

-> vielleicht eine native-XML-Datenbank verwenden und mit XQuery abfragen?

-> oder gleich die Struktur in eine Relationale DB abbilden?

aus den 15MB mit XSL das gewünschte zu extrahieren kann auch nur schiefgehen (weil da auch ein kompletter Baum aufgebaut werden muss...)


----------



## lotta (23. Feb 2005)

danke Bleiglanz! ich werd mir das Buch besorgen.

Das XML-file wird aus einer Oracle DB erstellt, also die Daten sind in einer Datenbank vorhanden. Wäre es denn besser, mir die Daten direkt da raus zu holen? Ohne Umweg über XML-file auf Platte speichern? Kann ich dann mit DOM arbeiten? Wenn DOM so grosse Datenmengen nicht verarbeiten kann, dann könnte ich doch die Response auch splitten, oder?

vielen Dank und alles Gute,
lotta


----------



## Bleiglanz (24. Feb 2005)

>>Wäre es denn besser, mir die Daten direkt da raus zu holen?

auf jeden Fall! Wozu 15MB aus der DB auf die Platte schaufeln und dann aufwändig mit XPATH, XQuery, XSLT oder sowas durchsuchen? Abfragen mit SELECT sind WESENTLICH SCHNELLER und flexibler...

>>Kann ich dann mit DOM arbeiten?

prinzipiell ja, normalerweise verwendest du aber irgendein Webservice Toolkit und du bekommst von der ganzen XML Geschichte überhaupt nichts mit; du schreibst deinen Endpoint als stinknormale Java Methode und der Rest wird hoffentlich von irgendwelchen BEA Tools übernommen 

GGF. kannst du auch die XML Funktionen von Oracle nutzen und eine SELECT Abfrage direkt als XML-String zurückbekommen (und das ganze dann einfach zum Client schicken...)


----------

