On 10/03/2010, at 9:40 AM, Adam Heath wrote:

> Adrian Crum wrote:
>> Bilgin Ibryam wrote:
>>> [email protected] 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.
> 

Apache Commons IOUtils has some methods for copying from a Reader to a Writer 
which might be helpful.

Regards
Scott

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to