class JTMTopicMapReader extends AbstractTopicMapReader {

  @Override
  protected TopicMapIF read(TopicMapStoreFactoryIF store_factory)
      throws IOException {
    TopicMapStoreIF store = store_factory.createStore();
    TopicMapIF topicmap = store.getTopicMap();

    // Set base address on in-memory store
    if ((store instanceof AbstractTopicMapStore)
        && store.getBaseAddress() == null)
      ((AbstractTopicMapStore) store).setBaseAddress(getBaseAddress());

    try (Reader reader = makeReader((String) null, new JTMEncodingSniffer())) {
      JTMStreamingParser parser = new JTMStreamingParser(topicmap);
      parser.parse(reader);
    } catch (JTMException e) {
      throw new IOException("Could not deserialize JTM fragment: "
          + e.getMessage());
    }

    // Process class-instance associations
    ClassInstanceUtils.resolveAssociations2(topicmap);

    return topicmap;
  }

  public  JTMTopicMapReader(URL url);
  public  JTMTopicMapReader(Reader reader, LocatorIF base_address);
  public  JTMTopicMapReader(InputStream stream, LocatorIF base_address);
  public  JTMTopicMapReader(File file);

}