Я использую приложение RESTful в своем проекте 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]
Кажется, что я могу» t сделать это:
object = clientResponse.getEntity(clazz);
Но я не знаю, как это исправить. Извините за мой английский: P
Edit: Im используя Джерси
edit2: Solution: Проблема была я метод GetEntity() дважды ... Если я использую его только один раз ... он работает ... черт возьми
Вызов из браузера работает отлично, спокойные методы в порядке. Но мне нужны модульные тесты, которые работают, когда я делаю это обычным способом (например, пример первого кода), но не работают, когда я пытаюсь clientResponse.getEntity (clazz) ;. Существует проблема с типичными типами, которые я думаю ... –