2012-06-07 2 views
0

Я использую приложение 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() дважды ... Если я использую его только один раз ... он работает ... черт возьми

ответ

0

Это звонок GET. попробуйте вызвать его из браузера.

Если это дает ту же ошибку, то нет ничего плохого в вашем клиенте.

+0

Вызов из браузера работает отлично, спокойные методы в порядке. Но мне нужны модульные тесты, которые работают, когда я делаю это обычным способом (например, пример первого кода), но не работают, когда я пытаюсь clientResponse.getEntity (clazz) ;. Существует проблема с типичными типами, которые я думаю ... –

0

Если у вас возникли проблемы только с модульным тестированием, вы можете взглянуть на тестовую структуру Джерси. Here - это ссылка на документы jersey на нем, google может указывать на дальнейшие учебные пособия.

+0

Я использую Джерси, но спасибо за ссылку. –

Смежные вопросы