2012-06-08 7 views
21

Az önce oluşturduğum sunucu uygulamasını denemek için bir birim sınaması oluşturuyorum. Kaçırdığım bir şeyNameValuePairs Listesinden bir UrlEncodedFormEntity Oluşturma bir NullPointerException atar

post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

var mı:

@Test 
public void test() throws ParseException, IOException { 

    HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("http://localhost:8080/WebService/MakeBaby"); 

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 

    nameValuePairs.add(new BasicNameValuePair("father_name", "Foo")); 
    nameValuePairs.add(new BasicNameValuePair("mother_name", "Bar")); 

    post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
    HttpResponse response = null; 

    try { 
    response = client.execute(post); 
    } catch (ClientProtocolException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 

    String stringifiedResponse = EntityUtils.toString(response.getEntity()); 

    System.out.println(stringifiedResponse); 

    assertNotNull(stringifiedResponse); 
} 

aşağıdaki satırı bir NullPointerException üretir?

cevap

29

Aptal soru için özür dilerim, utf-8 formatını ekleyerek çözdüm.

post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8")); 

biçimi beni kelimeler ISO-8859-1

olan DEFAULT_CONTENT_CHARSET kullanacağı geçmeden bir UrlEncodedFormEntity oluşturuluyor ... Ne NullPointerException atmak için sebep oluyor?

+1

Ben artık cevabı kabul edebiliriz. Aynı istisna vardı ve kodlamayı ekledim. Teşekkür ederim. –

+1

Bence bu 10 gibi aptalca bir soru değil :), benim de problemim sana benzer. Teşekkürler. –

+1

Bu, benim için günü kurtardı: Çiftlerde utf-8 değerleri vardı ve böylece doğru şekilde kodlanmıyorlardı - ISO-8859-1'in yapacağı gibi utf-8 karakterini savunuyordu! Teşekkürler! – rfay

11

Hiç de aptalca bir soru değil. Ben karışıklık httpclient 4.1'de, hiçbir kodlama formatı gereklidir-oldu Bu işe yaradığını düşünüyorum:

HttpEntity entity = new UrlEncodedFormEntity(params); 
method.setEntity(entity); 

Ben URIBuilder erişmek için 4.2 httpclient bağımlılığı değişti, ben var:

java.lang.NullPointerException 
at org.apache.http.entity.StringEntity.<init>(StringEntity.java:70) 
at org.apache.http.client.entity.UrlEncodedFormEntity.<init>(UrlEncodedFormEntity.java:78) 
at org.apache.http.client.entity.UrlEncodedFormEntity.<init>(UrlEncodedFormEntity.java:92)... 

4.2 ile, belirttiğiniz gibi kurucunun kodlamayı gerektirdiği görülüyor. Kafa karıştırıcı, doc eski kurucunun hala kullanılabilir olduğunu belirtir, ancak artık işe yaramıyor.

kamu UrlEncodedFormEntity (Liste parametreleri) doc

+0

Şimdi mantıklı, şerefe. –

+1

Bu bilinen bir regresyon gibi görünüyor: http://mail-archives.apache.org/mod_mbox/hc-httpclient-users/201205.mbox/%[email protected]%3E –