2012-06-08 4 views
21

Ich erstelle einen Komponententest, um das Servlet, das ich gerade erstellt habe, auszuprobieren.Erstellen einer UrlEncodedFormEntity aus einer Liste von NameValuePairs löst eine 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); 
} 

Die folgende Zeile erzeugt eine Nullpointer:

post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

Gibt es etwas, was ich vermisst habe?

Antwort

29

Entschuldigung für die blöde Frage, gerade gelöst, indem Sie das utf-8-Format hinzufügen.

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

ein UrlEncodedFormEntity erstellen, ohne das Format vorbei DEFAULT_CONTENT_CHARSET wird verwendet werden, die ISO-8859-1 ist

Was mich verwirrt ... was es verursacht NullPointerException zu werfen?

+1

Ich glaube, Sie Ihre Antwort jetzt akzeptieren. Ich hatte die gleiche Ausnahme und das Hinzufügen der Codierung löste mein Problem. Vielen Dank. –

+1

Ich denke das ist keine blöde Frage mit 10 wie :), mein Problem ist dir auch ähnlich Danke. –

+1

Dies rettete den Tag für mich: Ich hatte utf-8 Werte in den Paaren, und somit wurden sie nicht richtig codiert - es war der utf-8-Charakter, wie ISO-8859-1 würde! Vielen Dank! – rfay

11

Keine dumme Frage überhaupt. Ich denke, die Verwirrung ist, dass in Httpclient 4.1, kein Codierungsformat war erforderlich- Das funktionierte:

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

Wenn ich die Abhängigkeit geändert 4.2 um Httpclient URIBuilder zuzugreifen, ich habe:

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

Mit 4.2 scheint es, dass der Konstruktor die Codierung benötigt, wie Sie angemerkt haben. Verwirrenderweise gibt das Dokument an, dass der alte Konstruktor noch verfügbar ist, aber es scheint nicht mehr zu funktionieren.

public UrlEncodedFormEntity (List-Parameter) doc

+0

Macht jetzt Sinn, Prost. –

+1

Scheint, als ob dies eine bekannte Regression ist: http://mail-archives.apache.org/mod_mbox/hc-httpclient-users/201205.mbox/%[email protected]%3E –

Verwandte Themen