2013-02-08 20 views
0

我需要從我的數據庫檢索圖像。爲此,我使用jquery和servlet來檢索存儲在表中的所有圖像。但是,當我運行代碼它產生HTTP Status 500 - class oracle.jdbc.driver.OracleBlobInputStream declares multiple JSON fields named maxPosition我是Jquery的新手我不知道如何使用JSON的圖像。使用Jquery和servlet檢索圖像會產生HTTP狀態500錯誤

我的Servlet是:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String uname;// = request.getParameter("countryCode"); 
     uname="shyam"; 
     PrintWriter out = response.getWriter(); 
     response.setContentType("text/html"); 
     response.setHeader("Cache-control", "no-cache, no-store"); 
     response.setHeader("Pragma", "no-cache"); 
     response.setHeader("Expires", "-1"); 

     response.setHeader("Access-Control-Allow-Origin", "*"); 
     response.setHeader("Access-Control-Allow-Methods", "POST"); 
     response.setHeader("Access-Control-Allow-Headers", "Content-Type"); 
     response.setHeader("Access-Control-Max-Age", "86400"); 

     Gson gson = new Gson(); 
     JsonObject myObj = new JsonObject(); 

     ArrayList<ImageFileInfo> imageInfo = getInfo(uname); 
     ImageFileInfo info = new ImageFileInfo(); 
     JsonElement imageObj = gson.toJsonTree(imageInfo); 

     boolean nonNullElemExist= false; 
     for (ImageFileInfo s: imageInfo) { 
      if (s != null) { 
      nonNullElemExist = true; 
      break; 
      } 
     } 
     if(nonNullElemExist==true){ 
      myObj.addProperty("success", false); 
     } 
     else { 
      myObj.addProperty("success", true); 
     } 
     myObj.add("imageInfo", imageObj); 
     out.println(myObj.toString()); 
     out.close(); 

} 
private ArrayList<ImageFileInfo> getInfo(String uname) { 

    ArrayList<ImageFileInfo> imageFileList = new ArrayList<ImageFileInfo>(); 
     Connection conn = null;   
     PreparedStatement stmt = null;  

     try {  
      conn=prepareConnection(); 

      StringBuilder sb=new StringBuilder(1024); 
      sb.append("select * from ").append(uname.trim()).append("image"); 
      String sql=sb.toString(); 

      stmt = conn.prepareStatement(sql); 
      ResultSet rs = stmt.executeQuery(); 

      while(rs.next()){ 
       ImageFileInfo info = new ImageFileInfo(); 
       info.setName(rs.getString("imagename").trim()); 
       info.setDisc(rs.getString("imagedisc").trim()); 
       info.setImageid(rs.getInt("imageid")); 
       info.setalbumid(rs.getInt("albumid")); 

       byte imageData[] = rs.getBytes("imagethumb"); 
       String encoded = DatatypeConverter.printBase64Binary(imageData); 
       info.setThumb(encoded); 

       byte image1Data[] = rs.getBytes("imagethumb"); 
       String encoded1 = DatatypeConverter.printBase64Binary(image1Data); 

       info.setFull(encoded1); 
      }                   

      rs.close();                
      stmt.close();                
      stmt = null;                


      conn.close();                
      conn = null;             

     }                
     catch(Exception e){ System.out.println("Error --> " + displayErrorForWeb(e));;}      

     finally {              

      if (stmt != null) {           
       try {               
        stmt.close();            
       } catch (SQLException sqlex) {        
        // ignore -- as we can't do anything about it here   
       }                

       stmt = null;           
      }              

      if (conn != null) {          
       try {             
        conn.close();           
       } catch (SQLException sqlex) {       
        // ignore -- as we can't do anything about it here  
       }              

       conn = null;           
      }              
     }    

     return imageFileList; 

    } 

和ImageFileInfo.java文件是:

package skypark; 
import java.io.InputStream; 
public class ImageFileInfo 
{ 
String name = null; 
String disc = null; 
int imageid=0; 
int albumid=0; 
InputStream thumbarray; 
InputStream fullarray; 

public void setName(String name) 
{ 
    this.name = name; 
} 
public String getName() { 
    return name; 
} 
public void setDisc(String disc) 
{ 
    this.disc = disc; 
} 
public void setImageid(int Imageid) 
{ 
    this.imageid = Imageid; 
} 
public void setalbumid(int albumid) 
{ 
    this.albumid = albumid; 
} 
public void setThumb(InputStream inputStream) 
{ 
    this.thumbarray = inputStream; 
} 
public void setFull(InputStream binaryStream) { 
    this.fullarray = binaryStream; 

} 
} 

和堆棧跟蹤是:

java.lang.IllegalArgumentException: class oracle.jdbc.driver.OracleBlobInputStream declares multiple JSON fields named maxPosition 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:122) 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72) 
com.google.gson.Gson.getAdapter(Gson.java:353) 
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:55) 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195) 
com.google.gson.Gson.toJson(Gson.java:586) 
com.google.gson.Gson.toJsonTree(Gson.java:479) 
com.google.gson.Gson.toJsonTree(Gson.java:458) 
skypark.RetriveIm.doGet(RetriveIm.java:66) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

我不知道這是什麼錯誤告訴。請任何人都幫我解決這個問題......謝謝.....

回答

1

您在您的課堂中包含了兩個InputStream變量,它們被設置爲您的GSON提供程序無法序列化的實例OracleBlobInputStream。您可能希望將圖像內容存儲爲字節而不是(或作爲(URL編碼的)字符串)。

public class ImageFileInfo implements Serializable { 
    // Other class variables 
    private byte[] thumbarray; 
    private byte[] fullarray; 

    // Constructors, Getters/Setters 
} 

ImageFile.setThumb(rs.getBytes("imagethumb")); 
ImageFile.setFull(rs.getBytes("imagefull")); 

在一個側面的切線,它看起來像你正試圖返回JSON內容,但你沒有正確指定的您Content-Typetext/html,而不是application/json

+0

你能告訴我如何將它存儲爲'byte []'。 – james 2013-02-08 16:43:13

+0

@james - 在答案中增加了一些僞代碼。 – Perception 2013-02-08 16:47:22

+0

謝謝先生,現在代碼沒有錯誤,但無法在Web瀏覽器中顯示圖像。我添加了我的腳本。 – james 2013-02-08 17:24:30

相關問題