2012-06-08 16 views
21

Tôi đang tạo một thử nghiệm đơn vị để thử servlet mà tôi vừa tạo ra.Tạo một UrlEncodedFormEntity từ một danh sách NameValuePairs ném một NullPointerException

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

Các dòng sau tạo ra một NullPointerException:

post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

Có cái gì tôi đang thiếu?

Trả lời

29

Xin lỗi vì câu hỏi ngu ngốc, chỉ cần giải quyết câu hỏi đó bằng cách thêm định dạng utf-8.

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

Tạo một UrlEncodedFormEntity mà không đi định dạng sẽ sử dụng DEFAULT_CONTENT_CHARSET đó là ISO-8859-1

nào baffles tôi ... những gì gây ra nó để ném NullPointerException?

+1

Tôi nghĩ bạn có thể chấp nhận câu trả lời ngay bây giờ. Tôi đã có ngoại lệ tương tự và thêm mã hóa giải quyết vấn đề của tôi. Cảm ơn bạn. –

+1

Tôi nghĩ rằng đây không phải là câu hỏi ngu ngốc với 10 như :), vấn đề của tôi cũng tương tự như bạn Cảm ơn. –

+1

Điều này đã lưu ngày cho tôi: Tôi đã có giá trị utf-8 trong các cặp, và do đó chúng không được mã hóa chính xác - nó đã ném ký tự utf-8, như ISO-8859-1 sẽ làm! Cảm ơn! – rfay

11

Không phải là một câu hỏi ngu ngốc chút nào. Tôi nghĩ rằng sự nhầm lẫn là trong httpclient 4.1, không có định dạng mã hóa là required- này làm việc:

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

Khi tôi thay đổi phụ thuộc vào HttpClient 4.2 để truy cập URIBuilder, tôi nhận:

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)... 

Với 4,2, có vẻ như các nhà xây dựng yêu cầu mã hóa, như bạn đã lưu ý. Ngẫu nhiên, doc chỉ định rằng hàm tạo cũ vẫn có sẵn, nhưng nó dường như không hoạt động nữa.

công khai UrlEncodedFormEntity (Thông số danh sách) doc

+0

Làm cho cảm giác bây giờ, cổ vũ. –

+1

Có vẻ như đây là hồi quy đã biết: http://mail-archives.apache.org/mod_mbox/hc-httpclient-users/201205.mbox/%[email protected]%3E –

Các vấn đề liên quan