XMLEncoder производит меньше удобочитаемого XML в Java 7 по сравнению с Java 6

Вот простой пример, демонстрирующий проблему:

Рассмотрим два класса бинов Alpha и Beta:

public class Alpha {
    private String name;
    private Beta beta;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Beta getBeta() {
        return beta;
    }

    public void setBeta(Beta beta) {
        this.beta = beta;
    }
}


public class Beta {
    private Alpha alpha;

    public Alpha getAlpha() {
        return alpha;
    }

    public void setAlpha(Alpha alpha) {
        this.alpha = alpha;
    }
}

Затем создаются экземпляры Alpha и Beta, а объект Alpha записывается в XML:

Alpha alpha = new Alpha();
Beta beta = new Beta();

alpha.setBeta(beta);
alpha.setName("Rama");
beta.setAlpha(alpha);

XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("file.xml")));
encoder.writeObject(alpha);
encoder.close();

В Java 6 это приводит к следующему XML:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_24" class="java.beans.XMLDecoder">
 <object id="Alpha0" class="dk.kruger.Alpha">
  <void property="beta">
   <object class="dk.kruger.Beta">
    <void property="alpha">
     <object idref="Alpha0"/>
    </void>
   </object>
  </void>
  <void property="name">
   <string>Rama</string>
  </void>
 </object>
</java>

Но в Java 7 результат:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_07" class="java.beans.XMLDecoder">
 <object class="dk.kruger.Alpha" id="Alpha0">
  <void property="beta">
   <object class="dk.kruger.Beta">
    <void property="alpha">
     <object idref="Alpha0">
      <void property="name">
       <string>Rama</string>
      </void>
     </object>
    </void>
   </object>
  </void>
 </object>
</java>

XML, сгенерированный java 7, гораздо менее удобен для чтения человеком, чем java 6 XML (особенно, конечно, для более сложных примеров). В приведенном выше примере кодировщик Java 7 определяет свойство "имя" "альфа" внутри определения "бета", потому что "бета" также имеет ссылку на "альфа". Такое поведение может привести к глубоко вложенному и уродливому XML.

Есть ли способ заставить XML-кодировщик в Java 7 производить XML в стиле Java 6?

0 ответов

Другие вопросы по тегам