protected InputStream getInputStream() throws Exception {
   if (data != null) {
     return FileUtils.createInputStream(data);
   }
   if (inputStream != null) {
     data = FileUtils.createByteArray(inputStream, true);
     return FileUtils.createInputStream(data);
   }
   if (inputFile != null) {
     inputStream = new BufferedInputStream(new FileInputStream(inputFile));
     data = FileUtils.createByteArray(inputStream, true);
     return FileUtils.createInputStream(data);
   }
   return inputStream;
 }
 @Override
 public Book readBook() throws Exception {
   if (book == null) {
     if (data == null) {
       data = FileUtils.createByteArray(getInputStream(), true);
     }
     book = new Book();
     book.setTitle(bookTitle);
     book = this.parseBookFromXml(book, getInputStream());
   }
   return book;
 }