private void generatePdx() throws SAXException {
    AttributesImpl atts = new AttributesImpl();
    CacheConfig config = ((InternalCache) cache).getCacheConfig();
    if (config.pdxReadSerializedUserSet) {
      if (generateDefaults() || cache.getPdxReadSerialized()) {
        atts.addAttribute("", "", READ_SERIALIZED, "",
            Boolean.toString(cache.getPdxReadSerialized()));
      }
    }
    if (config.pdxIgnoreUnreadFieldsUserSet) {
      if (generateDefaults() || cache.getPdxIgnoreUnreadFields()) {
        atts.addAttribute("", "", IGNORE_UNREAD_FIELDS, "",
            Boolean.toString(cache.getPdxIgnoreUnreadFields()));
      }
    }
    if (config.pdxPersistentUserSet) {
      if (generateDefaults() || cache.getPdxPersistent()) {
        atts.addAttribute("", "", PERSISTENT, "", Boolean.toString(cache.getPdxPersistent()));
      }
    }
    if (config.pdxDiskStoreUserSet) {
      if (generateDefaults()
          || cache.getPdxDiskStore() != null && !cache.getPdxDiskStore().equals("")) {
        atts.addAttribute("", "", DISK_STORE_NAME, "", cache.getPdxDiskStore());
      }
    }
    if (!generateDefaults() && cache.getPdxSerializer() == null && atts.getLength() == 0) {
      return;
    }
    handler.startElement("", PDX, PDX, atts);

    if (cache.getPdxSerializer() != null) {
      generate(PDX_SERIALIZER, cache.getPdxSerializer());
    }
    handler.endElement("", PDX, PDX);
  }
Called by the transformer to parse the "input source". We ignore the input source and, instead,
generate SAX events to the {@link #setContentHandler ContentHandler}.
geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXmlGenerator.java