2

私は以下のプロセスを使用しています、

1)SOAPリクエスト用の文字列テンプレートを作成し、実行時にこのテンプレートでユーザー指定の値を置き換えて、有効なリクエストを作成します。2) この文字列を StringEntity でラップし、そのコンテンツ タイプを text/xml に設定します。3) このエンティティを SOAP リクエストに設定します。

httppost の助けを借りて、リクエストを投稿しています。

w3schools.com のデモ Web サービスを使用しています

URL--->

http://www.w3schools.com/webservices/tempconvert.asmx

私が試したことは、

HttpPost httppost = new HttpPost("http://www.w3schools.com/webservices/tempconvert.asmx");          
        StringEntity se;
        try {
            SOAPRequestXML="<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\"><soapenv:Header/><soapenv:Body><tem:CelsiusToFahrenheit><!--Optional:--><tem:Celsius>30</tem:Celsius></tem:CelsiusToFahrenheit></soapenv:Body></soapenv:Envelope>";
            Log.d("request is ", SOAPRequestXML+"!!!");
            se = new StringEntity(SOAPRequestXML,HTTP.UTF_8);


        se.setContentType("text/xml");  
        httppost.setHeader("Content-Type","application/soap+xml;charset=UTF-8");
        httppost.setEntity(se);  

        HttpClient httpclient = new DefaultHttpClient();
        BasicHttpResponse httpResponse = 
            (BasicHttpResponse) httpclient.execute(httppost);
        HttpEntity resEntity = httpResponse.getEntity();
        t.setText(EntityUtils.toString(resEntity));



        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

私はsoapuiで応答を得ることができるので、エミュレーターで出力を取得しているため、コードが間違っていることは確かです.

「メディアタイプがサポートされていないため、サーバーはリクエストを処理できません」。

HttpPost のコンストラクターで正しいパラメーターを渡していますか、それとも正しい xml 要求を行っていますか?たくさん試しましたが、わかりませんでした。

ありがとう

4

5 に答える 5

4

コードの唯一の問題は、ヘッダーを次のように設定していることです。

httppost.setHeader("Content-Type","application/soap+xml;charset=UTF-8");

それ以外の、

httppost.setHeader("Content-Type", "text/xml;charset=UTF-8");

-> w3schoolsである URL でリクエストを確認できるように、彼らは、

Content-Type: text/xml; charset=utf-8

そして、あなたは同じコンテンツタイプを渡していません。だから、それはあなたにエラーを与えていました、

メディア タイプがサポートされていないため、サーバーは要求を処理できません。

したがって、ヘッダーを変更するだけで、目的の応答が得られます。

于 2013-05-07T11:37:22.987 に答える
1

エミュレータのandroid版とスマホ版は違う気がする。

しかし、いくつかの提案があります。以下を使用します。

httppost.setHeader("Accept-Charset","utf-8");
httppost.setHeader("Accept","text/xml,application/text+xml,application/soap+xml");

同様に、コンテンツ タイプを上記のすべてとして設定します。

于 2013-05-07T11:11:37.917 に答える
1

このように、html フォームは 123 摂氏を投稿しています。SOAP やエンベロープはありません。動作するだけです :)

    try {
        HttpPost httppost = new HttpPost("http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit");
        StringEntity se = new StringEntity("Celsius=123");
        httppost.setEntity(se);
        httppost.setHeader("Content-Type", "application/x-www-form-urlencoded");
        HttpResponse httpResponse = new DefaultHttpClient().execute(httppost);
        HttpEntity resEntity = httpResponse.getEntity();
        return EntityUtils.toString(resEntity);
    } catch (Exception e) {
        e.printStackTrace();
        return e.getMessage();
    }
于 2013-09-02T21:18:41.150 に答える