Adrian Crum wrote:
> Bilgin Ibryam wrote:
>> adri...@apache.org wrote:
>>> Author: adrianc
>>> Date: Sat Jan 23 05:38:09 2010
>>> New Revision: 902341
>>>
>>> URL: http://svn.apache.org/viewvc?rev=902341&view=rev
>>> Log:
>>> Small improvement to ClobToString converter.
>>>
>>> Modified:
>>>    
>>> ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java
>>>
>>>
>>> Modified:
>>> ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java
>>>
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java?rev=902341&r1=902340&r2=902341&view=diff
>>>
>>> ==============================================================================
>>>
>>> ---
>>> ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java
>>> (original)
>>> +++
>>> ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java
>>> Sat Jan 23 05:38:09 2010
>>> @@ -108,15 +108,13 @@
>>>          }
>>>  
>>>          public String convert(Clob obj) throws ConversionException {
>>> -            StringBuilder strBuf = new StringBuilder();
>>> -            char[] inCharBuffer = new char[CHAR_BUFFER_SIZE];
>>> -            int charsRead = 0;
>>> +            char[] charBuffer = null;
>>>              Reader clobReader = null;
>>>              try {
>>> -                clobReader =  obj.getCharacterStream();
>>> -                while ((charsRead = clobReader.read(inCharBuffer, 0,
>>> CHAR_BUFFER_SIZE)) > 0) {
>>> -                    strBuf.append(inCharBuffer, 0, charsRead);
>>> -                }
>>> +                int clobLength = (int) obj.length();
>>> +                charBuffer = new char[clobLength];
>>> +                clobReader = obj.getCharacterStream();
>>> +                clobReader.read(charBuffer, 0, clobLength);
>>>              } catch (Exception e) {
>>>                  throw new ConversionException(e);
>>>              }
>>> @@ -127,7 +125,7 @@
>>>                      } catch (IOException e) {}
>>>                  }
>>>              }
>>> -            return strBuf.toString();
>>> +            return new String(charBuffer);
>>>          }
>>>      }
>>>  
>>>
>>>
>>>   
>> Adrian, there is a problem with this improvement:
>>
>> the following line
>>
>> clobReader.read(charBuffer, 0, clobLength);
>>
>> can't read more than 8192 chars when used with derby database (I
>> didn't check with other databases).
>> The bug appeared when I tried to read big xml file stored in
>> ElectronicText entity and got the xml truncated.
>> Also I think this is the cause for
>> https://issues.apache.org/jira/browse/OFBIZ-3529
> 
> I will look into it.

You have to always handle a short read, always.  Reintroduce the loop.

Reply via email to