Skip to Main Content

Java Programming

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

ImageIO.read issue

OAF_MonkeyNov 21 2012 — edited Nov 22 2012
I have the following code:
package silli.oracle.apps.ap.storejournal.schema.server;

import java.awt.Image;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.*;
import javax.servlet.http.*;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import javax.servlet.UnavailableException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServlet;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.DriverManager;
import java.io.OutputStream;
import java.io.InputStream;
import oracle.apps.fnd.common.WebAppsContext;
import oracle.apps.fnd.common.WebRequestUtil;

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.net.URL;

import java.sql.Blob;

import javax.imageio.ImageIO;


import javax.imageio.stream.MemoryCacheImageInputStream;

import javax.swing.ImageIcon;

import oracle.jdbc.pool.OracleDataSource;

public class ReadImage extends HttpServlet {
    private static final String CONTENT_TYPE = "text/html; charset=windows-1252";
    private Connection conn; 
    private Statement stmt; 
    private String trace; 
    int i=0; 

    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        try
        {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        }
        catch (Exception exception ) 
        { 
        exception.printStackTrace(); 
        throw new UnavailableException(exception.getMessage()); 
        } 
    }

    public void doGet(HttpServletRequest request, 
                      HttpServletResponse response) throws ServletException, 
                                                           IOException {
        String Ukey = "";
        //response.setContentType(CONTENT_TYPE);
         String fileName = request.getParameter("fileName");
         response.setContentType("application/octet-stream");
         response.setHeader("Pragma", "No-cache");
         response.setHeader("Cache-Control", "no-cache");
         response.setDateHeader("Expires",0);
         response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

       /* PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>ReadImage</title></head>");
        out.println("<body>");
        out.println("<p>The servlet has received a GET. This is the reply.</p>");
        out.println("</body></html>");
        out.close();*/
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, 
                       HttpServletResponse response) throws ServletException, 
                                                            IOException {
        String Ukey = "";
        response.setContentType(CONTENT_TYPE);
        /*PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>ReadImage</title></head>");
        out.println("<body>");
        out.println("<p>The servlet has received a POST. This is the reply.</p>");
        out.println("</body></html>");
        out.close();*/
        
        trace = ""; 
        if (conn == null)
        {
        try
        {
        WebAppsContext ctx = null;               
        ctx = WebRequestUtil.validateContext(request, response);
        ctx = WebRequestUtil.createWebAppsContext(request, response);
        //conn = ctx.getJDBCConnection();
        System.out.println("I am in Read Image servlet : user name is  "+ ctx.getUserName()+"-"+ctx.getUserPwd()); 
        
        
        conn = ctx.getJDBCConnection();
        stmt = conn.createStatement();
        }
        catch (Exception exception ) 
        { 
        exception.printStackTrace(); 
        throw new UnavailableException(exception.getMessage()); 
        } 
        }
       //-- 
        try 
        { 
        String image_id = request.getParameter("id");
        // String image_id = "31966744";
        System.out.println("I am in Read Image servlet : image id is "+ image_id );
        if (image_id != null)
        {
        String sql = "SELECT TRANS_IMAGE FROM STORE_TRANS_JOURNAL_TEXT_V WHERE UKEY = " + image_id;  

        
        System.out.println("I am in Read Image servlet1 : image id is "+ image_id + "Sql is:"+ sql );
        ResultSet rs = stmt.executeQuery(sql); 
        System.out.println("I am in Read Image servlet 2: image id is "+ image_id + "After executing the query:");
        rs.next(); 
        System.out.println("I am in Read Image servlet 3: image id is "+ image_id + "after rs.next ():");
        InputStream in = null; 
        System.out.println("I am in Read Image servlet 3: image id is "+ image_id + "After instantiating the input stream:");        
        in = rs.getBinaryStream("TRANS_IMAGE"); 
        System.out.println("I am in Read Image servlet 4: image id is "+ image_id + "After getBinaryStream():");
        response.reset();
        System.out.println("I am in Read Image servlet 4.1: image id is "+ image_id + "After response.reset():");
        OutputStream out1 = response.getOutputStream(); 
        //OutputStream out1 = response.getOutputStream("C:\"); 
        System.out.println("I am in Read Image servlet 5: image id is "+ image_id + "After outputstream:");
        int b;       
      // FileInputStream fis = new FileInputStream("C:\\JDEV\\jdevhome\\jdev\\myhtml\\OA_MEDIA\\US\\out.gif");
       

       System.out.println("I am in Read Image servlet 5: image id is "+ image_id + "After outputstream:");
       //BufferedWriter out = new BufferedWriter(fstream);
              
        while ((b = in.read()) != -1) 
        { 
        out1.write(b);        
        }       
        System.out.println("I am in Read Image servlet 6: image id is "+ image_id + "After the while loop:");
        in.close();       
        System.out.println("I am in Read Image servlet 7: image id is "+ image_id + "After the in.close():");
               //  out1.flush(); 
        System.out.println("I am in Read Image servlet 8: image id is "+ image_id + "After the outl.flush():");
        out1.close();        
        System.out.println("I am in Read Image servlet 6: image id is "+ image_id + "After the outl.close():");
        //---------------
        
         Blob test=rs.getBlob("TRANS_IMAGE");  
         response.setContentType("image/jpeg");
         response.setContentLength( (int) test.length());
      

         int blobLength = (int) test.length();   
         byte[] blobAsBytes = test.getBytes(1, blobLength);   
        //byte[] blobAsBytes = test.getBytes();  
        //String currentEncoding = System.getProperty("file.encoding");
        
        
        

         System.out.println("Length"+blobLength);             
         System.out.println("testlen"+blobAsBytes.length);   
         
         
         System.out.println("buffer available"+new ByteArrayInputStream( blobAsBytes ).available());   
         
        System.out.println("Available image readers1: "+ImageIO.getImageReadersByFormatName("jpg"));
        
        System.out.println("Available image readers2: "+ImageIO.getImageReadersByFormatName("JPEG"));
        
        System.out.println("Available image readers3: "+ImageIO.getImageReadersByFormatName("jpeg"));
         
         
         BufferedImage image = ImageIO.read( new ByteArrayInputStream( blobAsBytes ) ); 
         // BufferedImage image = new ImageIcon(Toolkit.getDefaultToolkit().createImage(blobAsBytes));

        
         System.out.println("Buffered image width and height: "+image.getWidth()+"-"+image.getHeight());
         
             ImageIO.write(image, "JPEG", new File("C:\\JDEV\\jdevhome\\jdev\\myhtml\\OA_MEDIA\\US\\image.JPG"));           
        
           
            //ImageIO.write(image, "JPEG", new File("C:\\sams1\\image.JPG"));   
            //   ImageIO.write(image, "PNG", new File("C:\\sams1\\image.PNG"));   
            //   ImageIO.write(image, "BMP", new File("C:\\sams1\\image.BMP"));   
           //    ImageIO.write(image, "TIF", new File("C:\\sams1\\image.TIF"));   
         System.out.println("row"+i);              
         i++; 
        //---------------
        
         stmt.close();
        }
        } 
        catch (SQLException sqlException)
        { 
        sqlException.printStackTrace(); 
        } 
        catch (Exception e) 
        {
        e.printStackTrace(); 
        throw new ServletException("Fatal Error" + e.getMessage()); 
        } 
        }
    

    public void doPut(HttpServletRequest request, 
                      HttpServletResponse response) throws ServletException, 
                                                           IOException {
        String Ukey = "";
    }
    
    
}
It is throwing an NPE at the line
BufferedImage image = ImageIO.read( new ByteArrayInputStream( blobAsBytes ) ); 
Why is not able to read the image from the blob column? Pls. note that I am not sure of the type of the image stored in the blob column. It is loaded by an external legacy source. As far as I know it is a (oracle compressed) jpeg.

Thanks,

Edited by: OAF_Monkey on Nov 21, 2012 2:06 PM
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Dec 20 2012
Added on Nov 21 2012
6 comments
941 views