Tuesday 17 April 2012

Reading file in classpath

Problem: Below code shows how to read a file in classpath. The file can be in jar file or in physical file system.

Solution: We can use "java.lang.Class.getResourceAsStream(String name)" to read file
 
 
package com.lac;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * Reads file in the class path
 * 
 * @author lac
 */
public class ReadFile {
 public static void main(String[] args) throws IOException {

  //Read Demo.txt from class path. The file Demo.txt is in package com.lac
  InputStream is = ReadFile.class.getResourceAsStream("/com/lac/Demo.txt");
  InputStreamReader isr = new InputStreamReader(is);
  BufferedReader br = new BufferedReader(isr);
  String fileContent = "";
  StringBuilder data = new StringBuilder();

  while ((fileContent = br.readLine()) != null) {
   data = data.append(fileContent);
  }
  is.close();

  System.out.println(data);
 }

}

Wednesday 11 April 2012

Jersey 1.8 and Spring 3.0 Integration Problem

When I am trying to integrate Jersey 1.8 with Spring 3.0.5. The integration use to fail with below exception
 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.scheduling.annotation.internalAsyncAnnotationProcessor': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/interceptor/AsyncExecutionInterceptor

java.lang.ClassNotFoundException: org.springframework.aop.interceptor.AsyncExecutionInterceptor
 
Reason: The reason for this problem is. Jersey spring integration library "jersey-spring" is downloading older version of aop "spring-aop-2.5.6.SEC03.jar". If you exclude it. The problem should be solved.
Solution: Update the pom.xml to exclude the dependency "spring-aop"

  org.springframework
  spring-aop


Now Dependency section should look like.

   com.sun.jersey.contribs
   jersey-spring
   1.8
   
    
     org.springframework
     spring
    
    
     org.springframework
     spring-core
    
    
     org.springframework
     spring-web
    
    
     org.springframework
     spring-beans
    
    
     org.springframework
     spring-context
    
    
     org.springframework
     spring-aop
     
   
  

Thursday 5 April 2012

Generating Random Bytes using Java

 Below example explains to generate Random bytes.  We can use "java.util.Random" or "java.security.SecureRandom" to generate Random Bytes.

package demo;

import java.security.SecureRandom;
import java.util.Arrays;
import java.util.Random;

public class RandomByte {

 public static void main(String[] args) {
  System.out.println(Arrays.toString(getRandomByteArray(256)));
  
  //SecureRandom is a  bit costlier object. 
  SecureRandom random= new SecureRandom();
  System.out.println(Arrays.toString(random.generateSeed(256)));
  
 }
 public static byte[] getRandomByteArray(int size){
  byte[] result= new byte[size];
  Random random= new Random();
  random.nextBytes(result);
  return result;
 }
}