Rest httpunit PutMethodWebRequest抛出IOException;坏的文件描述符
有人能解释一下为什么这个httpunit测试用例在wc.getResponse中使用“坏文件描述符”失败吗。我添加了is.close()作为猜测,并在失败前后移动了它,但没有任何效果。此测试将请求放入Dropwizard应用程序Rest httpunit PutMethodWebRequest抛出IOException;坏的文件描述符,rest,put,http-unit,dropwizard,Rest,Put,Http Unit,Dropwizard,有人能解释一下为什么这个httpunit测试用例在wc.getResponse中使用“坏文件描述符”失败吗。我添加了is.close()作为猜测,并在失败前后移动了它,但没有任何效果。此测试将请求放入Dropwizard应用程序 public class TestCircuitRequests { static WebConversation wc = new WebConversation(); static String url = "http://localhost
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();
}
没有回应?所以我会根据我在战斗中学到的东西来尝试自己 Httpunit是一个我熟悉的老工具,如果可以的话,我会使用它。但是它已经两年多没有更新了,所以我认为它对@PUT请求的支持是不对的 所以我改成了泽西岛的客户。经过一系列的努力,我最终得到了这段代码,这段代码似乎确实有效:
@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字符串自动构造bean 在这种情况下,“坏文件描述符”到底意味着什么?您可能想查看httpunit开发人员常见问题解答,看看1.7.2版本是否正在开发中。请检查rev1099,为什么您要故意避免使用Jackson etc来编组您的实体?让Jackson处理InputStream可以减少设备中的错误。