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;

	}

}

Attachment: pom.xml
Description: XML document

Reply via email to