A
android-entwickler
Neues Mitglied
- 1
Hallo zusammen,
ich benötigte in meiner App die Kommunikation über SOAP. Es sollen komplexe Datentypen ausgetauscht werden, welche auf dem Server generiert und an den Client übermittelt werden. Nun funktioniert die Kommunikation soweit ganz gut, nur leider bekomme ich kein direktes Objekt-Mapping hin.
wenn ich den SerializeableSoapEnvelope korrekt gefüllt und abgeschickt hab, kann ich mittels getResponse() oder alternativ mit envelope.bodyIn den Response abgreifen. Besteht nun überhaupt die Möglichkeit, den Inhalt direkt als selbstdefiniertes Objekt (welches das Kvm..-Interface implementiert hat) zu erhalten?
Irgendwas scheint beim Mapping falsch zu laufen, da ich als Typ immer "anyType" angezeigt bekomme...
Hier wäre der Request:
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
<n0:GetJobs id="o0" c:root="1" xmlns:n0="http://tempuri.org/" />
</v:Body>
</v:Envelope>
und der Response:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetJobsResponse xmlns="http://tempuri.org/">
<GetJobsResult xmlns:a="http://schemas.datacontract.org/2004/07/ConsoleApplication1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:id>98764321</a:id>
<a:name>bon jour</a:name>
</GetJobsResult>
</GetJobsResponse>
</s:Body>
</s:Envelope>
Hier wäre noch der aufrufende Code:
final SoapObject request = new SoapObject(NAMESPACE, "GetJobs");
final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.implicitTypes = true;
envelope.setOutputSoapObject(request);
envelope.addMapping(NAMESPACE, "GetJobsResponse", SingleJob.SINGLE_JOB);
final HttpTransportSE http = new HttpTransportSE(URL);
http.debug = true;
try
{
http.call("http://tempuri.org/HelloWorldService/GetJobs", envelope);
SingleJob sJ = ((SingleJob)envelope.getResponse());
// so hätte ich gern den Response...
}
catch (IOException e)
{
e.printStackTrace();
}
catch (XmlPullParserException e)
{
e.printStackTrace();
}
Ich bin dankbar für jeden Hinweis.
Viele Grüße,
der Entwickler
ich benötigte in meiner App die Kommunikation über SOAP. Es sollen komplexe Datentypen ausgetauscht werden, welche auf dem Server generiert und an den Client übermittelt werden. Nun funktioniert die Kommunikation soweit ganz gut, nur leider bekomme ich kein direktes Objekt-Mapping hin.
wenn ich den SerializeableSoapEnvelope korrekt gefüllt und abgeschickt hab, kann ich mittels getResponse() oder alternativ mit envelope.bodyIn den Response abgreifen. Besteht nun überhaupt die Möglichkeit, den Inhalt direkt als selbstdefiniertes Objekt (welches das Kvm..-Interface implementiert hat) zu erhalten?
Irgendwas scheint beim Mapping falsch zu laufen, da ich als Typ immer "anyType" angezeigt bekomme...
Hier wäre der Request:
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
<n0:GetJobs id="o0" c:root="1" xmlns:n0="http://tempuri.org/" />
</v:Body>
</v:Envelope>
und der Response:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetJobsResponse xmlns="http://tempuri.org/">
<GetJobsResult xmlns:a="http://schemas.datacontract.org/2004/07/ConsoleApplication1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:id>98764321</a:id>
<a:name>bon jour</a:name>
</GetJobsResult>
</GetJobsResponse>
</s:Body>
</s:Envelope>
Hier wäre noch der aufrufende Code:
final SoapObject request = new SoapObject(NAMESPACE, "GetJobs");
final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.implicitTypes = true;
envelope.setOutputSoapObject(request);
envelope.addMapping(NAMESPACE, "GetJobsResponse", SingleJob.SINGLE_JOB);
final HttpTransportSE http = new HttpTransportSE(URL);
http.debug = true;
try
{
http.call("http://tempuri.org/HelloWorldService/GetJobs", envelope);
SingleJob sJ = ((SingleJob)envelope.getResponse());
// so hätte ich gern den Response...
}
catch (IOException e)
{
e.printStackTrace();
}
catch (XmlPullParserException e)
{
e.printStackTrace();
}
Ich bin dankbar für jeden Hinweis.
Viele Grüße,
der Entwickler