package org.xbib.elasticsearch.index.analysis.combo; import java.io.BufferedReader; import java.io.Reader; import java.lang.reflect.Field; /** * A {@link java.io.BufferedReader} ReaderUnwrapper that * returns the Reader wrapped inside the BufferReader. */ public class BufferedReaderUnwrapper implements ReaderCloneFactory.ReaderUnwrapper<BufferedReader> { private static Field internalField; static { try { internalField = BufferedReader.class.getDeclaredField("in"); internalField.setAccessible(true); } catch (Exception ex) { throw new IllegalArgumentException("Could not give accessibility to private \"in\" field of the given BufferedReader", ex); } } public Reader unwrap(BufferedReader originalReader) throws IllegalArgumentException { try { return (Reader) internalField.get(originalReader); } catch (Exception ex) { throw new IllegalArgumentException("Could not access private \"in\" field of the given BufferedReader (actual class: " + originalReader.getClass().getCanonicalName() + ")", ex); } } }