2010-10-02 34 views
4

J'ai créé un client SOAP d'authentification NTLM basé sur KSOAP-Android et JCIFS. La mise en œuvre ressemble à quelque chose comme ceci:KSoap-Android JCIFS envoie un message HTTP vide

public class NtlmServiceConnection implements ServiceConnection 
{ 
    public NtlmServiceConnection(final SoapConnectionInfo connectionInfo, String path)  
    { 
     httpclient = new DefaultHttpClient(); 
     httpclient.getAuthSchemes().register(AuthPolicy.NTLM, new NTLMSchemeFactory()); 

    //... 

    @Override 
    public InputStream openInputStream() throws IOException { 
     ByteArrayEntity re = new ByteArrayEntity(bufferStream.toByteArray()); 
     post.removeHeaders("CONTENT-LENGTH"); 
     post.setEntity(re); 
     HttpResponse rep = httpclient.execute(post); 
     InputStream stream = rep.getEntity().getContent(); 
     return stream; 
    } 

    //.... 
} 

De l'apparence de celui-ci KSOAP génère le message correct car bufferStream est rempli avec l'enveloppe SOAP comme prévu. JCIFS semble faire son travail aussi bien que je peux voir la réponse de défi NTLM prenant place via Wireshark. Le problème est que le corps du message est manquant. C'est simplement nul. Pour cette raison, le service Web rencontre un 501 et le InputStream retourné est nul.

Quelqu'un at-il une idée de ce qui se passerait?

Remarque: Je supprime l'en-tête CONTENT-LENGTH ci-dessous car setEntity essaie apparemment de le définir, mais KSOAP l'a déjà défini. Je l'enlève simplement et permets à setEntity de le réinitialiser.

Répondre

1

Je fini par comprendre et blogué à ce sujet ici: http://csharpening.net/blog/?p=271

+0

C'est bien beau, mais une fois que vous authentifiez avec succès, comment persistez-vous que l'authentification de sorte que vous pouvez revenir à l'utilisation HttpTransportSE? En d'autres termes, je peux m'authentifier et obtenir les SoapObjects pour cette réponse, mais dès que j'exécute une autre AsyncTask qui utilise HttpTransportSE, je reçois un "aucun défi d'authentification trouvé". – whyoz

+0

Vous devez publier le code dans un commentaire au lieu de créer un lien vers votre propre blog. Votre lien source du blog ne fonctionne plus et si vous allez prendre votre blog sur le wisdome sera perdu. Pour le pire j'avais besoin de ça. – Warpzit

+0

Ça fait des années que j'ai regardé ça et j'ai vraiment été mauvais sur le blog récemment. En fait trouvé le ZIP https://dl.dropboxusercontent.com/u/3771090/MobileTfsBuildMonitor.zip –