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