Author: jleroux
Date: Fri Jun  8 20:37:32 2018
New Revision: 1833211

URL: http://svn.apache.org/viewvc?rev=1833211&view=rev
Log:
Fixed: streaming large content cause out of memory exception.
(OFBIZ-10133)

With r1821036 DataResourceWorker.getDataResourceStream() may return an 
InputStream (if the data resource is a file) instead of a ByteArrayInputStream 
which was expected in few places.

This fixes it

Modified:
    
ofbiz/ofbiz-framework/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataEvents.java
    
ofbiz/ofbiz-framework/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java
    
ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderEvents.java

Modified: 
ofbiz/ofbiz-framework/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataEvents.java
URL: 
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataEvents.java?rev=1833211&r1=1833210&r2=1833211&view=diff
==============================================================================
--- 
ofbiz/ofbiz-framework/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataEvents.java
 (original)
+++ 
ofbiz/ofbiz-framework/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataEvents.java
 Fri Jun  8 20:37:32 2018
@@ -18,7 +18,6 @@
  
*******************************************************************************/
 package org.apache.ofbiz.content.data;
 
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -287,7 +286,7 @@ public class DataEvents {
             }
             OutputStream os = response.getOutputStream();
             Map<String, Object> resourceData = 
DataResourceWorker.getDataResourceStream(dataResource, "", 
application.getInitParameter("webSiteId"), UtilHttp.getLocale(request), 
application.getRealPath("/"), false);
-            
os.write(IOUtils.toByteArray((ByteArrayInputStream)resourceData.get("stream")));
+            
os.write(IOUtils.toByteArray((InputStream)resourceData.get("stream")));
             os.flush();
         } catch (GeneralException | IOException e) {
             String errMsg = "Error downloading digital product content: " + 
e.toString();

Modified: 
ofbiz/ofbiz-framework/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java
URL: 
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java?rev=1833211&r1=1833210&r2=1833211&view=diff
==============================================================================
--- 
ofbiz/ofbiz-framework/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java
 (original)
+++ 
ofbiz/ofbiz-framework/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java
 Fri Jun  8 20:37:32 2018
@@ -1136,7 +1136,7 @@ public class DataResourceWorker  impleme
     public static ByteBuffer getContentAsByteBuffer(Delegator delegator, 
String dataResourceId, String https, String webSiteId, Locale locale, String 
rootDir) throws IOException, GeneralException {
         GenericValue dataResource = 
EntityQuery.use(delegator).from("DataResource").where("dataResourceId", 
dataResourceId).queryOne();
         Map<String, Object> resourceData = 
DataResourceWorker.getDataResourceStream(dataResource, https, webSiteId, 
locale, rootDir, false);
-        ByteArrayInputStream stream = (ByteArrayInputStream) 
resourceData.get("stream");
+        InputStream stream = (InputStream) resourceData.get("stream");
         ByteBuffer byteBuffer = ByteBuffer.wrap(IOUtils.toByteArray(stream));
         return byteBuffer;
     }

Modified: 
ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderEvents.java
URL: 
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderEvents.java?rev=1833211&r1=1833210&r2=1833211&view=diff
==============================================================================
--- 
ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderEvents.java
 (original)
+++ 
ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderEvents.java
 Fri Jun  8 20:37:32 2018
@@ -18,8 +18,8 @@
  
*******************************************************************************/
 package org.apache.ofbiz.order.order;
 
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.util.HashMap;
@@ -80,7 +80,7 @@ public class OrderEvents {
             OutputStream os = response.getOutputStream();
             GenericValue dataResource = 
EntityQuery.use(delegator).from("DataResource").where("dataResourceId", 
dataResourceId).cache().queryOne();
             Map<String, Object> resourceData = 
DataResourceWorker.getDataResourceStream(dataResource, "", 
application.getInitParameter("webSiteId"), UtilHttp.getLocale(request), 
application.getRealPath("/"), false);
-            os.write(IOUtils.toByteArray((ByteArrayInputStream) 
resourceData.get("stream")));
+            os.write(IOUtils.toByteArray((InputStream) 
resourceData.get("stream")));
             os.flush();
         } catch (GeneralException | IOException e) {
             String errMsg = "Error downloading digital product content: " + 
e.toString();
@@ -106,9 +106,9 @@ public class OrderEvents {
 
         if (selectedItems != null) {
             for (String selectedItem : selectedItems) {
-               String [] orderItemSeqIdAndOrderItemShipGrpId = 
selectedItem.split(":");
-               String orderItemSeqId = orderItemSeqIdAndOrderItemShipGrpId[0];
-               String shipGroupSeqId = orderItemSeqIdAndOrderItemShipGrpId[1];
+                String [] orderItemSeqIdAndOrderItemShipGrpId = 
selectedItem.split(":");
+                String orderItemSeqId = orderItemSeqIdAndOrderItemShipGrpId[0];
+                String shipGroupSeqId = orderItemSeqIdAndOrderItemShipGrpId[1];
                         BigDecimal cancelQuantity = new 
BigDecimal(request.getParameter("iqm_"+orderItemSeqId+":"+shipGroupSeqId));
                         Map<String, Object> contextMap = new HashMap<>();
                         contextMap.put("orderId", orderId);


Reply via email to