2012-10-04 47 views
1

有人可以解釋爲什麼這個httpunit測試用例在wc.getResponse中使用「壞文件描述符」保持失敗。我添加了is.close()作爲猜測,並在失敗之​​前和之後移動它,但沒有任何效果。此測試將請求發送到Dropwizard應用程序。httpunit PutMethodWebRequest拋出IOException;壞文件描述符

public class TestCircuitRequests 
{ 
    static WebConversation wc = new WebConversation(); 
    static String url = "http://localhost:8888/funl/circuit/test.circuit1"; 

@Test 
public void testPut() throws Exception 
{ 
    InputStream is = new FileInputStream("src/test/resources/TestCircuit.json"); 
    WebRequest rq = new PutMethodWebRequest(url, is, "application/json"); 

    wc.setAuthentication("FUNL", "foo", "bar"); 
    WebResponse response = wc.getResponse(rq); 
    is.close(); 
} 
+0

無論如何,「壞文件描述符」是什麼意思? – Bradjcox

+0

您可能想要查看httpunit開發者FAQ 以查看1.7.2版本是否有效。請檢查rev1099 https://sourceforge.net/mailarchive/forum.php?thread_name=5051BBF6.70700%40bitplan.com&forum_name=httpunit-develop –

回答

0

沒有迴應?所以我會根據我學到的東西來嘗試自己。

Httpunit是一個老熟悉的工具,我會使用,如果我可以。但它已經兩年多沒有更新,所以我收集它對@PUT請求的支持是不對的。

所以我轉而使用Jersey-client。一幫掙扎後,我結束了這段代碼這似乎工作:

@Test 
public void testPut() throws Exception 
{ 
    InputStream is = new FileInputStream("src/test/resources/TestCircuit.json"); 
    String circuit = StreamUtil.readFully(is); 
    is.close(); 

    Authenticator.setDefault(new MyAuthenticator()); 
    ClientConfig config = new DefaultClientConfig(); 
    Client client = Client.create(config); 
    com.sun.jersey.api.client.WebResource service = client.resource(url); 

    Builder builder = service.accept(MediaType.APPLICATION_JSON); 
    builder.entity(circuit, MediaType.APPLICATION_JSON); 
    builder.put(String.class, circuit); 
    return; 
} 

這一有意避免了JAX-RS從JSON字符串豆自動化建設。

+0

爲什麼你要故意避免使用Jackson等編組你的實體?讓傑克遜在InputStream上工作可以減少您的燈具中的錯誤。 –