Do not know why I am getting the exception mentioned in subject int the below code
package test;
import static org.mockito.Mockito.mock;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.junit.Rule;
import org.junit.Test;
import db.ClientNumberDao;
import io.dropwizard.testing.junit.ResourceTestRule;
import junit.framework.TestCase;
import resource.ClientNumberResource;
public class ClientNumberResourceTest extends TestCase {
static ClientNumberDao dao = mock(ClientNumberDao.class);
@Rule
public static final ResourceTestRule resources =
ResourceTestRule.builder()
.addResource(new ClientNumberResource(dao)).build();
@Test
public void testClientNumberResource() throws Exception {
//Exception generated here
Client c = resources.client();
WebTarget helloTarget = c.target("http://localhost:8080/number");
Invocation.Builder builder =
helloTarget.request(MediaType.APPLICATION_JSON);
Response response = builder.get();
assertEquals(Response.Status.OK, response.getStatusInfo());
}
}
--
You received this message because you are subscribed to the Google Groups
"dropwizard-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.
package resource;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import constants.ClientNumberConstants;
import core.ClientNumber;
import db.ClientNumberDao;
import io.dropwizard.hibernate.UnitOfWork;
import io.dropwizard.jersey.params.LongParam;
@Path("/number")
@Produces(value = "application/json")
public class ClientNumberResource {
private ClientNumberDao clientNumberDao;
public ClientNumberResource(ClientNumberDao clientNumberDao) {
// TODO Auto-generated constructor stub
this.clientNumberDao = clientNumberDao;
}
@GET
@UnitOfWork
public ClientNumber getNewClientNumber() {
return clientNumberDao.createAndGetNextAvailNumber();
}
@GET
@Path("/{id}")
@UnitOfWork
public ClientNumber findById(@PathParam("id") LongParam id) {
if (id.get() > ClientNumberConstants.MAX_DEFINED_NUMBER
|| id.get() < ClientNumberConstants.MIN_DEFINED_NUMBER) {
throw new WebApplicationException("Please select a valid range between 1111111111-9999999999");
}
ClientNumber clientNumber = clientNumberDao.findById(id.get());
if (clientNumber == null) {
ClientNumber newClientNumber = clientNumberDao.createNumberWithId(id.get());
if (newClientNumber == null)
throw new WebApplicationException("Something went wrong,Please try again later");
return newClientNumber;
}
if (clientNumber.getActive() == 0) {
ClientNumber cn = clientNumberDao.updateStatusOfNumber(clientNumber);
if (cn == null)
throw new WebApplicationException("Please try again later");
return cn;
}
return clientNumberDao.createAndGetNextAvailNumber();
}
}
package db;
import java.util.List;
import javax.transaction.Transaction;
import javax.ws.rs.BadRequestException;
import javax.ws.rs.WebApplicationException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import constants.ClientNumberConstants;
import core.ClientNumber;
import io.dropwizard.hibernate.AbstractDAO;
import static java.util.Objects.requireNonNull;
@SuppressWarnings("unused")
public class ClientNumberDao extends AbstractDAO<ClientNumber> {
public ClientNumberDao(SessionFactory sessionFactory) {
super(sessionFactory);
}
public ClientNumber findById(long id) {
return get(id);
}
public ClientNumber findNextAvailNumber() {
java.util.List<ClientNumber> listClientNumber = list(
namedQuery("core.ClientNumber.findNextAvailNumber").setMaxResults(1));
return listClientNumber.isEmpty() ? null : listClientNumber.get(0);
}
public ClientNumber updateStatusOfNumber(ClientNumber clientNumber) {
clientNumber.setActive(ClientNumberConstants.ACTIVE);
return persist(clientNumber);
}
public ClientNumber createNumberWithId(long id) {
if (id > ClientNumberConstants.MAX_DEFINED_NUMBER || id < ClientNumberConstants.MIN_DEFINED_NUMBER)
throw new WebApplicationException("Please select a valid range between 1111111111-9999999999");
ClientNumber clientNumber = new ClientNumber();
clientNumber.setId(id);
clientNumber.setActive(ClientNumberConstants.ACTIVE);
return persist(clientNumber);
}
public ClientNumber createAndGetNextAvailNumber() {
ClientNumber clientNumber = this.findNextAvailNumber();
if (clientNumber == null) {
System.out.println("invoking create native query");
this.createNewInactiveNumbersInDb();
System.out.println("invoking find next avail num query");
clientNumber = this.findNextAvailNumber();
if (clientNumber == null)
throw new WebApplicationException("could not create new numbers");
}
if (clientNumber.getId() > ClientNumberConstants.MAX_DEFINED_NUMBER) {
throw new BadRequestException("Sorry , any number is not available");
}
// System.out.println(clientNumber.getId() + clientNumber.getActive() +
// "found");
clientNumber = this.updateStatusOfNumber(clientNumber);
if (clientNumber == null) {
throw new WebApplicationException("Please try again later");
}
return clientNumber;
}
private void createNewInactiveNumbersInDb() {
Query q = namedQuery("core.ClientNumber.createNewInactiveNumbersInDb")
.setMaxResults(ClientNumberConstants.MAX_NEW_NUMBERS_CREATION_LIMIT);
Session session = currentSession();
org.hibernate.Transaction tx = session.beginTransaction();
int count = 0;
List<Long> ids = requireNonNull(q).list();
// creating InactiveClientNumbers in batches of
// 20 each time if any Inactive Number is
// unavailable in the system
for (Long id : ids) {
ClientNumber clientNumber = new ClientNumber(id);
if (id <= ClientNumberConstants.MAX_DEFINED_NUMBER) {
session.save(clientNumber);
}
if (count % 20 == 0) {
session.flush();
session.clear();
}
count++;
}
tx.commit();
// session.close();
}
}
package config;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.dropwizard.Configuration;
import io.dropwizard.db.DataSourceFactory;
public class ClientNumberConfiguration extends Configuration {
@NotNull
@Valid
private DataSourceFactory dataSourceFactory = new DataSourceFactory();
@JsonProperty("database")
public DataSourceFactory getDataSourceFactory() {
return dataSourceFactory;
}
}
pom.xml
Description: XML document
