Beitrag-soap-xml-request mit Retrofit
Ich versuche zu veröffentlichen, die das soap-xml mit Retrofit-aber es fehlschlägt, verwende ich eine Einfache XML-Framework zum Modell einer SOAP-Anfrage, die wie folgt aussieht:
Request-XML
@Root(name = "soap12:Envelope")
@NamespaceList({
@Namespace(reference = "http://www.w3.org/2001/XMLSchema-instance", prefix = "xsi"),
@Namespace(reference = "http://www.w3.org/2001/XMLSchema", prefix = "xsd"),
@Namespace(prefix = "soap12", reference = "http://www.w3.org/2003/05/soap-envelope")
})
@Element(name = "soap12:Body")
public class GeoIP {
@Namespace(reference = "http://www.webservicex.net/")
@Element(name="GetGeoIP")
private GetGeoIP GetGeoIP;
public GetGeoIP getGetGeoIP() {
return GetGeoIP;
}
public void setGetGeoIP(GetGeoIP getGeoIP) {
this.GetGeoIP = getGeoIP;
}
@Namespace(reference = "http://www.webservicex.net/")
public static class GetGeoIP{
@Element(name = "IPAddress")
private String IPAddress;
public String getIP() {
return IPAddress;
}
public void setIP(String IP) {
this.IPAddress = IP;
}
}
}
Erwartete Ausgabe:
<?xml version="1.0" encoding="utf-8"?>
<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">
<soap12:Body>
<GetGeoIPResponse xmlns="http://www.webservicex.net/">
<GetGeoIPResult>
<ReturnCode>int</ReturnCode>
<IP>string</IP>
<ReturnCodeDetails>string</ReturnCodeDetails>
<CountryName>string</CountryName>
<CountryCode>string</CountryCode>
</GetGeoIPResult>
</GetGeoIPResponse>
</soap12:Body>
</soap12:Envelope>
Fehlerausgang
<--- HTTP 500 http://www.webservicex.net/geoipservice.asmx (2240ms)
06-15 08:22:09.567 26327-26359/com. D/Retrofit: : HTTP/1.1 500 Internal Server Error
06-15 08:22:09.567 26327-26359/com.a D/Retrofit: Cache-Control: private
06-15 08:22:09.567 26327-26359/com.a.mfmpay D/Retrofit: Content-Length: 1188
06-15 08:22:09.567 26327-26359/com.a D/Retrofit: Content-Type: text/xml; charset=utf-8
06-15 08:22:09.567 26327-26359/com.a D/Retrofit: Date: Wed, 15 Jun 2016 03:22:00 GMT
06-15 08:22:09.567 26327-26359/com.a D/Retrofit: OkHttp-Received-Millis: 1465960929564
06-15 08:22:09.567 26327-26359/com.a D/Retrofit: OkHttp-Response-Source: NETWORK 500
06-15 08:22:09.567 26327-26359/com.a D/Retrofit: OkHttp-Selected-Protocol: http/1.1
06-15 08:22:09.567 26327-26359/com.a D/Retrofit: OkHttp-Sent-Millis: 1465960928849
06-15 08:22:09.567 26327-26359/com.a D/Retrofit: Server: Microsoft-IIS/7.0
06-15 08:22:09.567 26327-26359/com.a D/Retrofit: X-AspNet-Version: 4.0.30319
06-15 08:22:09.567 26327-26359/com.a D/Retrofit: X-Powered-By: ASP.NET
at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)</faultstring><detail /></soap:Fault></soap:Body></soap:Envelope>
06-15 08:22:09.570 26327-26359/com.a D/Retrofit: <--- END HTTP (1188-byte body)
06-15 08:22:09.571 26327-26327/com.a V/TAG: 500 Internal Server Error
Endpunkt-Schnittstelle
public interface MagentoApi {
@Headers({"Content-Type: application/soap+xml; charset=utf-8"})
@POST("/geoipservice.asmx")
public void requestGeo(@Body GeoIP.GetGeoIP body,Callback<GeoIPResponse> cb);
}
Hauptklasse Code
GeoIP.GetGeoIP request = new GeoIP.GetGeoIP();
request.setIP("192.168.1.1");
RestAdapter restAdapter = getRestAdapter();
MagentoApi api = restAdapter.create(MagentoApi.class);
api.requestGeo(request, cb);
retrofit.Callback<GeoIPResponse> cb = new retrofit.Callback<GeoIPResponse>() {
@Override
public void success(GeoIPResponse geoIPResponse, retrofit.client.Response response) {
Log.v("TAG", String.valueOf(response.getStatus()));
}
@Override
public void failure(RetrofitError error) {
Log.v("TAG",error.getLocalizedMessage());
}
};
public static RestAdapter getRestAdapter() {
Strategy strategy = new AnnotationStrategy();
Serializer serializer = new Persister(strategy);
OkHttpClient okHttpClient = new OkHttpClient();
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://www.webservicex.net")
.setClient(new OkClient(okHttpClient))
.setConverter(new SimpleXMLConverter(serializer))
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
return restAdapter;
}
- können überprüfen Sie Diesen link geekcalledk.blogspot.com/2014/08/... und Schnee.Hund/blog/android-and-magento-soap-api-Teil-ii
- schon folgte aber nicht Frucht voller für mich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich gemacht habe, ein Beispiel für diese Art von webservices. (mit webservicex als Beispiel). Sie sehen es an meinem blog oder in mein github
UPDATE
Benötigten Bibliotheken:
Die Probe wird für dieses webservice: http://www.webservicex.net/New/Home/ServiceDetail/42
Erste von allen, müssen Sie erstellen Retrofit-Beispiel:
Danach müssen Sie zum erstellen der API-Objekt:
Für die Erstellung der Entitäten, die Sie haben, um kommentieren Sie Sie richtig ein. Dies sind die request-Klassen (response-Klassen sind in der gleichen Art und Weise):
Klasse: UsStatesRequestEnvelope
Klasse : UsStatesRequestBody
Klasse: UsStatesRequestData