Я использую метод JerseyTest с ресурсом, который использует метод validateSession раньше, когда ресурс не использует validateSession, он отлично работает, но расширение класса с помощью validateSession вызывает ошибку 500 в тесте. Я думаю, это потому, что в тесте HttpServletRequest имеет значение null. Я пытаюсь сначала сделать логин перед тестом в том же тесте метода, но не получится. Любая помощь. Это простой ресурс:JerseyTest не работает, потому что HttpServletRequest имеет значение
@Path("/test")
public class Prueba extends BaseLoginWebService {
final static Logger logger = Logger.getLogger(Prueba.class);
@GET
public String saludo() {
return "it works";
}
}
Ресурс для того, чтобы вернуть строку, используйте BaseLoginWebService методом validateSession, ранее он используется LoginWebService:
public class BaseLoginWebService {
@Context
HttpServletRequest request;
final static Logger logger = Logger.getLogger(Prueba.class);
@PostConstruct
public void init() throws Exception {
validateSession();
}
private void validateSession() throws Exception {
HttpSession session = request.getSession();
Cookie[] cookies = request.getCookies();
String token = null;
for (Cookie cookie : cookies) {
if ((cookie.getValue().equals(session.getAttribute("token")))) {
token = (String) session.getAttribute("token");
break;
}
}
if (token == null) {
throw new Exception("no session");
}
}
}
LoginWebService:
@Path("/login")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class LoginWebService {
@Context
HttpServletRequest request;
@POST
public Response login(LoginEntity loginEntity) {
if (loginEntity != null) {
if (loginEntity.getUser().equals("root") && loginEntity.getPassword().equals("root")) {
HttpSession session = request.getSession();
session.setMaxInactiveInterval(5);
Random random = new Random();
int token = random.nextInt(100) + 1;
session.setAttribute("token", String.valueOf(token));
return Response.noContent().cookie(new NewCookie("token", String.valueOf(token))).build();
} else {
return Response.status(Response.Status.BAD_REQUEST).build();
}
} else {
return Response.status(Response.Status.CONFLICT).build();
}
}
}
Ресурс отлично работает, но в испытаниях нет:
public class PruebaTest extends JerseyTest {
@Override
public Application configure() {
enable(TestProperties.DUMP_ENTITY);
enable(TestProperties.LOG_TRAFFIC);
return new ResourceConfig(Prueba.class);
}
@Override
protected TestContainerFactory getTestContainerFactory() throws TestContainerException {
return new ExternalTestContainerFactory();
}
@Override
protected URI getBaseUri() {
URI uri = UriBuilder.fromPath("http://localhost:9090/messenger_webapp/rest").build();
return uri;
}
@Test
public void saludoTest() {
System.out.println("saludoTest");
String output = target("/test").request().get(String.class);
assertEquals("Should return it works", "it works", output);
}
}
Ошибка:
javax.ws.rs.InternalServerErrorException: HTTP 500 Request failed.
at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:1020)
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:816)
..... and more .....