2016-09-03 10 views
1

私は、XML要求を行うためにhttps://gist.github.com/itsalif/6149365ライブラリを使用しています。 Simple-XMLを使用してXMLをオブジェクトにシリアライズします。ヘッダー、ボディー、パラメーターでXML APIリクエストを作成するにはどうすればよいですか?

ヘッダーとパラメータがSOAP APIに関連付けられていない場合、XMLリクエストを正常に行うことができました。しかし、ヘッダーとパラメーターで構成される複雑な要求はほとんど行いませんが、私は応答できません。

は、私の要求フォーマットは、この

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.holidaywebservice.com/HolidayService_v2/"> 
<SOAP-ENV:Body> 
    <ns1:GetHolidaysAvailable> 
    <ns1:countryCode>UnitedStates</ns1:countryCode> 
    </ns1:GetHolidaysAvailable> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

コードのように見える

HashMap<String, String> mapData = new HashMap<>(); 
final String mRequestBody = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"http://www.holidaywebservice.com/HolidayService_v2/\">\n" + 
     " <SOAP-ENV:Body>\n" + 
     " <ns1:GetHolidaysAvailable>\n" + 
     "  <ns1:countryCode>UnitedStates</ns1:countryCode>\n" + 
     " </ns1:GetHolidaysAvailable>\n" + 
     " </SOAP-ENV:Body>\n" + 
     "</SOAP-ENV:Envelope>"; 

SimpleXmlRequest dellaRequest = new SimpleXmlRequest<String> 
     (Request.Method.POST, "http://www.holidaywebservice.com//HolidayService_v2/HolidayService2.asmx?wsdl", String.class, headerDataMap, bodyDataMap, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 

         Log.d("BaseActivity", "response = " + response.toString()); 

        } 
       }, 
       new Response.ErrorListener() { 

        @Override 
        public void onErrorResponse(VolleyError error) { 

         Log.d("BaseActivity", "Error:" + error.getMessage()); 

        } 
       } 
     ){ 
    @Override 
    public byte[] getBody() throws AuthFailureError { 

     try { 
      return mRequestBody == null ? null : mRequestBody.getBytes("utf-8"); 
     } catch (UnsupportedEncodingException uee) { 
      VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", 
        mRequestBody, "utf-8"); 
      return null; 
     } 
    } 
}; 

私は400応答コードすなわちBAD REQUEST、状態無効な入力が提供されることなどの検証エラーを取得していますまたは欠落しているデータ。

このapiはPostman rest clientで問題なく動作します。だから私は何が間違っているのか理解できません。

答えて

0

Volleyを使用すると、このXMLリクエストを効果的に呼び出すことができます。

String url = "http://www.holidaywebservice.com/HolidayService_v2/HolidayService2.asmx"; 


//Volley request 
StringRequest request = new StringRequest(Request.Method.POST, url, 

     new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 

       Log.d("Response", response); 

      } 
     }, 
     new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

       Log.d("Error", error.getMessage()); 

      } 
     }) { 

    @Override 
    public String getBodyContentType() { 
     // set body content type 
     return "text/xml; charset=UTF-8"; 
    } 

    @Override 
    public byte[] getBody() throws AuthFailureError { 

     try { 
      return reqXML.getBytes("UTF-8"); 
     } catch (UnsupportedEncodingException uee) { 
      // TODO consider if some other action should be taken 
      return null; 
     } 
    } 

}; 
// 
//Creating a Request Queue 
RequestQueue requestQueue = Volley.newRequestQueue(this); 

//Adding request to the queue 
requestQueue.add(request); 
関連する問題