通用方法,RESTful应用程序

时间:2012-06-07 11:20:30

标签: java generics rest

我在我的java项目中使用RESTful应用程序。通常在我的单元测试类中,我使用这样的方法:

public Employee getEmployeeByEmail(String email) {
    ClientResponse clientResponse = webResource.path(beginPath + "getByEmail/" + email).get(
            ClientResponse.class);

    Employee employee = null;
    if (200 == clientResponse.getStatus()) {
        employee = clientResponse.getEntity(Employee.class);
    }

    return employee;
}

...但我必须在近12个不同的类中使用类似的方法。这就是我决定做的事情:

public class TestManager<T> {

private WebResource webResource;
private String beginPath;
private Class<T> clazz;

public TestManager(WebResource webResource, String beginPath, Class<T> clazz) {
    this.webResource = webResource;
    this.beginPath = beginPath;
    this.clazz = clazz;
}

public boolean objectExists(String methodPath, String uniqueFieldName, String uniqueField) {
    boolean check = false;
    ClientResponse clientResponse = webResource.path(beginPath + methodPath + "/" + uniqueField).get(
                ClientResponse.class);
    JSONObject jsonObject = clientResponse.getEntity(JSONObject.class);

    if (200 == clientResponse.getStatus() && !jsonObject.isNull(uniqueFieldName)) {
        check = true;
    }

    return check;
}

public T getObjectById(String methodPath, long id) {
    ClientResponse clientResponse = webResource.path(beginPath + methodPath + "/" + id).get(
            ClientResponse.class);
    T object = null;
    if (200 == clientResponse.getStatus() && !clientResponse.getEntity(JSONObject.class).isNull("id")) {
        object = clientResponse.getEntity(clazz);
    }

    return object;
}

}

方法objectExists()工作正常,但getObjectById()方法生成堆栈跟踪:

javax.ws.rs.WebApplicationException: javax.xml.bind.UnmarshalException: Error creating JSON-based XMLStreamReader - with linked exception:[javax.xml.stream.XMLStreamException: java.io.IOException: stream is closed]

似乎我不能这样做:

object = clientResponse.getEntity(clazz);

但我不知道如何解决它。对不起我的英文:P

编辑: 我正在使用运动衫

EDIT2: 的解决方案: 问题是我使用了两次getEntity()方法......如果我只使用它一次......它的工作原理......该死的

2 个答案:

答案 0 :(得分:0)

这是一个GET电话。尝试从浏览器中调用它。

如果出现同样的错误,那么您的客户就没有问题。

答案 1 :(得分:0)

如果您在单元测试中遇到问题,那么您可能需要查看Jersey测试框架。 Here是指向其上的球衣文档的链接,谷歌可以为您指出进一步的教程。