code: @Override
      public T getUnmarshalledObject(final UnmarshallingCallback<T> callback) {
          //Only bother checking for a change if the object already exists
          Long lastModified = null;
          if (this.unmarshalledObject != null) {
              lastModified = this.getLastModified();
  
              //Return immediately if nothing has changed
              if (this.isCacheValid(lastModified)) {
                  return this.unmarshalledObject;
              }
          }
  
          final InputStream xmlInputStream = this.getXmlInputStream();
          final JAXBContext jaxbContext = this.getJAXBContext();
          final Unmarshaller unmarshaller = this.getUnmarshaller(jaxbContext);
          final T unmarshalledObject = this.unmarshal(xmlInputStream, unmarshaller);
  
          if (callback != null) {
              callback.postProcessUnmarshalling(unmarshalledObject);
          }
  
          this.unmarshalledObject = unmarshalledObject;
          if (lastModified != null) {
              this.lastModifiedTime = lastModified;
          } else {
              this.lastModifiedTime = System.currentTimeMillis();
          }
  
          return this.unmarshalledObject;
      }
docs: /* (non-Javadoc)
  @see org.jasig.services.persondir.support.xml.CachingJaxbLoader#getUnmarshalledObject(org.jasig.services.persondir.support.xml.CachingJaxbLoader.UnmarshallingCallback)