German Webservice

Kiffi

Well-Known Member
Licensed User
Longtime User
ich habe jetzt mal exemplarisch GetMatchByMatchID
aus Sportsdata Web Service aufgerufen.

Schau mal, ob Du was mit dem Code anfangen kannst.
Falls Fragen sind: immer her damit :)

B4X:
Sub Globals
   Dim myHttpClient As HttpClient
End Sub

Sub Callwebservice()

   Dim XML As StringBuilder

   XML.Initialize

   XML.Append("<?xml version=''1.0'' encoding=''utf-8''?>")
   XML.Append("<soap12:Envelope xmlns:xsi=''http://www.w3.org/2001/XMLSchema-instance'' xmlns:xsd=''http://www.w3.org/2001/XMLSchema'' xmlns:soap12=''http://www.w3.org/2003/05/soap-envelope''>")
   XML.Append("  <soap12:Body>")
   XML.Append("    <GetMatchByMatchID xmlns=''http://msiggi.de/Sportsdata/Webservices''>")
   XML.Append("      <MatchID>626</MatchID>")
   XML.Append("    </GetMatchByMatchID>")
   XML.Append("  </soap12:Body>")
   XML.Append("</soap12:Envelope>")

   myHttpClient.Initialize("myHttpClient")

   Dim myHttpRequest As HttpRequest

   Dim URL As String 

   URL = "http://www.openligadb.de/Webservices/Sportsdata.asmx"

   myHttpRequest.InitializePost2(URL, XML.ToString.Replace("''", Chr(34)).GetBytes("UTF8"))
   myHttpRequest.SetHeader("Content-Type", "application/soap+xml; charset=utf-8")
   myHttpRequest.Timeout = 10000 

   If myHttpClient.Execute(myHttpRequest, 1) = False Then Return

End Sub

Sub myHttpClient_ResponseSuccess (Response As HttpResponse, TaskId As Int)
   
   Log("Success:")
   Log(Response.GetString("UTF8"))

End Sub

Sub myHttpClient_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)
   
   Log("Error:")
   Log(Response.GetString("UTF8"))
   
End Sub

Anmerkung:
Der Einfachheit halber habe ich Response.GetString() verwendet.
Korrekterweise sollte Response.GetAsynchronously() benutzt werden.

Grüße ... Kiffi
 

mcmanu

Active Member
Licensed User
Longtime User
Wow

WOW Danke Kiffi, Total nett von dir :) werd mir den Code mal anschauen den du gepostet hast und mich dann selbst ans werk machen :)

Danke danke danke ;)
 

mcmanu

Active Member
Licensed User
Longtime User
Noch eine Frage

Hab jetzt bisschen herumexperimentiert und Funktioniert super :)
Nun habe ich noch eine Frage :)
Ich bekomme ja die xml datei als String zurück.
Ist es möglich daraus wieder eine xml datei zu erstellen sodass ich diese Parsen kann?
 

Kiffi

Well-Known Member
Licensed User
Longtime User
Ist es möglich daraus wieder eine xml datei zu erstellen sodass ich diese Parsen kann?
Du kannst aus dem Response den InputStream in einen SaxParser
umleiten. Also anstelle von:
B4X:
Response.GetString(...)
ein:
B4X:
mySaxParser.Parse(Response.GetInputStream, "mySaxParser")

Grüße ... Kiffi
 

Kiffi

Well-Known Member
Licensed User
Longtime User
um das noch mal (hoffentlich sauber) abzuschliessen: Hier die GetAsynchronously-Variante

B4X:
Sub myHttpClient_ResponseSuccess (Response As HttpResponse, TaskId As Int)
   
   Response.GetAsynchronously("WebserviceResponse", File.OpenOutput(File.DirInternalCache, "WebserviceResponse.xml", False), True, TaskId)

End Sub

Sub WebserviceResponse_StreamFinish (Success As Boolean, TaskId As Int)

   If Success = False Then
      Msgbox(LastException.Message, "Error")
      Return
   End If
   
   Log("Success:")
      
   Dim myInputStream As InputStream
   
   myInputStream = File.OpenInput(File.DirInternalCache, "WebserviceResponse.xml")
   
   mySaxParser.Parse(myInputStream, "mySaxParser")

End Sub

Grüße ... Kiffi
 

mcmanu

Active Member
Licensed User
Longtime User
Danke

Und nochmal Vielen Vielen Dank :)
Werd heute wenn ich daheim bin mal mit den Daten und dem Code Rumexperimentieren :)

Danke
 

mcmanu

Active Member
Licensed User
Longtime User
@Kiffi, Weisst du woran es liegen Könnte das ich ab und zu eine Fehlermeldung bekomme (Fehlerorg.apache.harmony.xml.ExpatParser$ParseException: at line 1,column 0: no element found)? ich hab mir danach die xml datei angesehen und in manchen "attributen" bzw stringattribute stehen keine Daten, in manche schon, also sozusagen eine nicht ganz gefüllte xml datei. Eventuell wegen dem Timeout?

Habe dazu ein C# projekt mit visual studio erstellt damit funktioniert der aufruf immer, daher denke ich liegt es an meinem Programm.

Ist es möglich die xml datei auch über httpUtils zu bekommen?

Sorry wegen meinen ganzen fragen
 
Last edited:

Kiffi

Well-Known Member
Licensed User
Longtime User
@Kiffi, Weisst du woran es liegen Könnte das ich ab und zu eine Fehlermeldung bekomme [...]
puh, keine Ahnung. Kann viele Ursachen haben...

Ist es möglich die xml datei auch über httpUtils zu bekommen?
japp:
B4X:
Sub CallWebservice2()

   Dim XML As StringBuilder

   XML.Initialize

   XML.Append("<?xml version=''1.0'' encoding=''utf-8''?>")
   XML.Append("<soap12:Envelope xmlns:xsi=''http://www.w3.org/2001/XMLSchema-instance'' xmlns:xsd=''http://www.w3.org/2001/XMLSchema'' xmlns:soap12=''http://www.w3.org/2003/05/soap-envelope''>")
   XML.Append("  <soap12:Body>")
   XML.Append("    <GetMatchByMatchID xmlns=''http://msiggi.de/Sportsdata/Webservices''>")
   XML.Append("      <MatchID>626</MatchID>")
   XML.Append("    </GetMatchByMatchID>")
   XML.Append("  </soap12:Body>")
   XML.Append("</soap12:Envelope>")

   Dim URL As String 
   URL = "http://www.openligadb.de/Webservices/Sportsdata.asmx"
      
   Dim Job As HttpJob
   Job.Initialize("Job", Me)
   Job.PostString(URL, XML.ToString.Replace("''", Chr(34)))
   Job.GetRequest.SetHeader("Content-Type", "application/soap+xml; charset=utf-8")

End Sub

Sub JobDone(Job As HttpJob)
   
   If Job.Success Then
   
      Dim myTextReader As TextReader
      myTextReader.Initialize(Job.GetInputStream)
      Dim Xml As String = myTextReader.ReadAll
      Log(Xml)
      myTextReader.Close
   
   Else

      Log("!Job.Success")
   
   End If

   Job.Release

End Sub

Grüße ... Kiffi
 

mcmanu

Active Member
Licensed User
Longtime User
Vielen Dank kiffi :)
habe nun die xml datei so formatiert das nach jedem ">" eine neue zeile angefagen wird (voher wurde sie in einer zeile gespeichert)
Vieleicht war das das Problem, ich probiere es und sag bescheid ;)

Edit: Scheinbar war wirklich das das Problem, nun scheint es zu funktionieren :) Vielen dank für deine Super hilfe :)
 
Last edited:

Kiffi

Well-Known Member
Licensed User
Longtime User
Die Frage ist vieleicht doof, aber wenn ich es über httputils mache wie speichere ich dann den string als xml datei?
musst Du ihn denn speichern? Wenn ja, dann -> File.WriteString()

Wenn es nur um den SaxParser geht: Diesem kannst Du auch den TextReader
direkt übergeben (Parse2()).

Grüße ... Kiffi
 

mcmanu

Active Member
Licensed User
Longtime User
Sorry, hatte es editiert als du die antwort geschrieben hast ;) habs rausgefunden :) Funktioniert nun alles ganz gut ;) Vielen Vielen Dank :)
 
Top