code: @Override
      public Hashtable<String, Object> getDataAsHashtable() {
          logger.entering();
          if (null == resource.getCls()) {
              resource.setCls(KeyValueMap.class);
          }
  
          Hashtable<String, Object> dataHashTable = new Hashtable<>();
          try {
              JAXBContext context = JAXBContext.newInstance(resource.getCls());
              Unmarshaller unmarshaller = context.createUnmarshaller();
              StreamSource xmlStreamSource = new StreamSource(resource.getInputStream());
              Map<String, KeyValuePair> keyValueItems = unmarshaller
                      .unmarshal(xmlStreamSource, KeyValueMap.class).getValue().getMap();
              for (Entry<?, ?> entry : keyValueItems.entrySet()) {
                  dataHashTable.put((String) entry.getKey(), entry.getValue());
              }
          } catch (JAXBException excp) {
              logger.exiting(excp.getMessage());
              throw new DataProviderException("Error unmarshalling XML file.", excp);
          }
  
          logger.exiting();
          return dataHashTable;
      }
docs: Gets xml data and returns in a hashtable instead of an Object 2D array. Only compatible with a xml file
  formatted to return a map. <br>
  <br>
  XML file example:
  
  <pre>
  <items>
  <item>
  <key>k1</key>
  <value>val1</value>
  </item>
  <item>
  <key>k2</key>
  <value>val2</value>
  </item>
  <item>
  <key>k3</key>
  <value>val3</value>
  </item>
  </items>
  </pre>
  
  @return xml data in form of a Hashtable.