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.