Je souhaite appeler une API (@POST) qui utilise des données XML. Et je ne sais pas exactement comment l'envoyer '-'. J'ai appris à faire avec JSON, mais différent avec XMLUtilisation de la retrofit avec des données XML
je recherche comme 3/4 jours et je ne pouvais pas trouver une solution qui convient pour moi:/
Voici la demande que je dois envoyer :
<qosFeatureData xmlns:qos="urn:oma:xml:rest:netapi:qos:1">
<clientCorrelator>v1234</clientCorrelator>
<predefinedQosFeatureId>Pred_Coca</predefinedQosFeatureId>
<media>
<mediaNumber>1</mediaNumber>
<mediaType>Other</mediaType>
<ipFlow>
<flowNumber>1</flowNumber>
<flowDescription>
<direction>Downlink</direction>
<protocol>6</protocol>
<otherPartyIpAddress>
<ipV4Address>X.X.X.X</ipV4Address>
</otherPartyIpAddress>
<otherPartyPortNumber>
<port>XX</port>
</otherPartyPortNumber>
<userIpAddress>
<ipV4Address>Y.Y.Y.Y</ipV4Address> ?????
</userIpAddress>
</flowDescription>
<flowDescription>
<direction>Uplink</direction>
<protocol>6</protocol>
<otherPartyIpAddress>
<ipV4Address>X.X.X.X</ipV4Address>
</otherPartyIpAddress>
<otherPartyPortNumber>
<port>XX</port>
</otherPartyPortNumber>
<userIpAddress>
<ipV4Address>Y.Y.Y.Y</ipV4Address> ?????
</userIpAddress>
</flowDescription>
<flowStatus>Enabled</flowStatus>
</ipFlow>
<flowStatus>Enabled</flowStatus>
</media>
je l'ai déjà mis en place le code pour l'appel « post » (avec rien dedans) et je suis une réponse (pas une bonne réponse: 500, mais je pense qu'il est à cause de mon données qui ne sont pas envoyées)
Voici mon code d'interface
public interface ApiHttpPost {
@Headers({"Content-Type: application/xml; charset=utf-8"})
@POST("confidential")
Call<qosFeature> getqosFeature (@Header("Authorization") String authHeader);
}
Voici ma principale activité
private void AppelHttpPost() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("CONFIDENTIAL")
.client(getUnsafeOkHttpClient())
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();
ApiHttpPost service = retrofit.create(ApiHttpPost.class);
String userName = "CONFIDENTIAL";
String passWord = "CONFIDENTIAL";
String base = userName + ":" + passWord;
String authHeader = "Basic " + Base64.encodeToString(base.getBytes(), Base64.NO_WRAP);
Call<qosFeature> qosFeatureCall = service.getqosFeature(authHeader);
qosFeatureCall.enqueue(new Callback<qosFeature>() {
@Override
public void onResponse(Call<qosFeature> call, Response<qosFeature> response) {
int statusCode = response.code();
qosFeature qosFeature = response.body();
Log.d(TAG, "onResponse: " + statusCode);
}
@Override
public void onFailure(Call<qosFeature> call, Throwable t) {
Log.d(TAG, "onFailure: " + t.getMessage());
}
});
}
Thx pour votre aide: s
EDIT: Je reviens à demander à nouveau votre aide, la solution proposée par Potapov Anton ne travailler dans mon cas. Sur le studio Android, en mode debug je vois quelque chose de bien! (Capture d'écran)
Mais quand je regarde sur Wireshark ce n'est pas bon, il y a la chaîne/chaîne que je ne veux pas + xml ne semble pas bien (Capture d'écran)
Donc, toute autre idée d'envoyer des données XML? : x Thx
Mais ne i besoin de créer un "corps" de classe et l'appeler pour pouvoir l'utiliser ici? –
Vous n'avez pas besoin de créer d'autres classes. Il suffit de le passer comme une ficelle dans le corps param. Il a type String. –
Donc, dans mon activité principale, je dois ajouter quelque chose comme ça: String body = "tout le XML demande ici" Et appelez-le dans: service.getqosFeature (authHeader, corps) Droit? –