5

KSOAP-AndroidとJCIFSに基づいてNTLM認証SOAPクライアントを作成しました。実装は次のようになります。

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;
    }

    //....
}

見た目から、KSOAPは正しいメッセージを生成しています。これbufferStreamは、期待どおりにSOAPエンベロープが入力されているためです。JCIFSはその役割を果たしているようであり、Wiresharkを介してNTLMチャレンジレスポンスが行われているのを見ることができます。問題は、メッセージ本文が欠落していることです。それは単にnullです。このため、Webサービスは501に遭遇し、InputStream返されたものはnullです。

なぜこれが起こるのか誰かが手がかりを持っていますか?

注:setEntity明らかにこれを設定しようとしているが、KSOAPがすでに設定しているため、以下のCONTENT-LENGTHヘッダーを削除しています。削除しsetEntityてリセットするだけです。

4

1 に答える 1

1

私はついにそれを理解し、ここでブログに書きました:http ://csharpening.net/blog/?p=271

于 2010-11-30T01:44:05.037 に答える