Wednesday, 28 August 2013

Null-Pointer Exception while using AOP

Null-Pointer Exception while using AOP

application context file
<!-- Aspect -->
<!-- It allow @Component, @Service, @Controller, etc.. annotations -->
<context:component-scan base-package="com.toshiba.cns.*" />
<aop:aspectj-autoproxy/>
<!-- It allow us to use @Autowire, @Required and @Qualifier
annotations -->
<context:annotation-config />
<!-- Logger bean -->
<bean id="logger" class="org.slf4j.LoggerFactory"
factory-method="getLogger">
<constructor-arg type="java.lang.String" value="com.toshiba.cns" />
</bean>
<!-- Aspect -->
<bean id="logAspect"
class="com.toshiba.cns.customer.resource.AllAspects" />
</beans>
Above code is the application context file which contain all the bean
declaration.
Controller Class CustomersResource . This class will receive the request
initially. Basic requirement is to validate the customer object from
server side.
@Controller
@Path("/customers")
public class CustomersResource implements Serializable {
private static final long serialVersionUID = 1L;
@Autowired
ICustomerService customerService;
@Autowired
IPartnerService partnerService;
@Autowired
ResourceHelper resourceHelper;
@Autowired
private Logger logger;
/**
* @Request POST
* @param uriInfo - To get Absolute path
* @param Customer - JSON Request of Customer to add
* @return Response with created customer Payload. Also includes
location header
* @throws TCException - If customer Name already exist
* @Description REST service to add Customer sent as JSON
*/
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response addCustomer(@Context UriInfo uriInfo, Customer
customer) throws TCException {
logger.info("Entering addCustomer for customer " +
customer.getCustomerName());
logger.debug("customer Desc \t " + customer.getDescription());
MultivaluedMap<String, String> queryParams =
uriInfo.getQueryParameters();
String partnerId = queryParams.getFirst("partnerId");
logger.info("Partner ID from Query Param : " + partnerId);
// If partnerId : Null, Customer type is direct ie, not associated
with any partner. implies customer type = 0
// [Direct]
if (null == partnerId) {
// Add DIRECT Customer
customer.setCustomerType(0);
logger.debug("Customer type set to : DIRECT");
} else {
// ADD INDIRECT Customer
// Set customer type, partner
customer.setCustomerType(1);
logger.debug("Customer type set to : INDIRECT");
// Check if partner exist
Partner partner =
partnerService.getPartnerById(Long.parseLong(partnerId));
if (null == partner) {
logger.error("EntityResourceNotFoundException. Partner
Resource not found for ID : " + partnerId);
throw new EntityResourceNotFoundException("", "Partner
Resource with ID : " + partnerId
+ " not found to add customer");
}
customer.setPartner(partner);
logger.debug("Customer set to Partner : " + partnerId);
}
// Save Customer
customer = customerService.addCustomer(customer);
// Creating location header
UriBuilder builder = uriInfo.getAbsolutePathBuilder();
URI uri = builder.path(String.valueOf(customer.getId())).build();
logger.info("Exiting addCustomer for customer " +
customer.getCustomerName());
return Response
.created(URI.create(uri.toString()))
.entity(
resourceHelper.buildResponse(customer,
Status.CREATED.toString(),
"Customer Created: " +
customer.getCustomerName())).build();
}
Aspect class AllAspects
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
@Aspect
public class AllAspects {
@Before("execution(*
com.toshiba.cns.customer.resource.CustomersResource.addCustomer(..))")
public void logBefore(JoinPoint joinPoint) {
System.out.println("logBefore() is running!");
System.out.println("******");
}
}
My problem is the control flow is not going inside the method
"logBefore(...)"of class AllAspects and also in class CustomersResource
at the method addCustomers(...) logger is coming as null.
Please help me get out of this issue.

No comments:

Post a Comment