Десериализация XML с определенным ENTITY в объекты с использованием XStream/StaxDriver

Я хочу десериализовать файл XML в объекты java/groovy с помощью XStream. В файле XML определен ENTITY. Поэтому я использовал StaxDriver для автоматического разрешения сущностей. Но StaxDriver/XStream игнорирует/удаляет частичное содержимое.

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE parent [
<!ENTITY File_file SYSTEM "File_file.xml">
]>

<parent>
	<name>NAME</name>
	<description>DSCRIPTION</description>
	<context>
	    <files>
&File_file;
</files>
	</context>
</parent>

После десериализации и повторной печати в формате XML: Ожидается:

<?xml version="1.0" encoding="UTF-8"?>
<parent>
	<name>NAME</name>
	<description>DSCRIPTION</description>
   <context>
      <files>
<file>
    <name>name</name>
    <path>location path</path>
</file>
      </files>
   </context>
</parent>

но я вижу ниже:

<?xml version="1.0" encoding="UTF-8"?>
<parent>
	<name>NAME</name>
	<description>DSCRIPTION</description>
   <context>
      <files>
<file>
</file>
      </files>
   </context>
</parent>

Код/логика для десериализации содержимого xml.

    public class Parser {

public static void main(String[] args) {
    if (args.length != 1) {
        System.out.println("Usage:Parser <Input File>");
        return;
    }
    XStream xstream = new XStream(new StaxDriver());
    xstream.alias("parent", Parent.class);
    xstream.alias("context", Context.class);
    xstream.alias("files", Files.class);
    xstream.addImplicitCollection(Files.class, "files");
    xstream.alias("files", File.class);
    String xml = Util.getFileText(args[0]);//file.text;
    System.out.println(xml);
    Parent te = (Parent)xstream.fromXML(xml);
    System.out.println(XmlUtil.serialize(xstream.toXML(te)));
}

}


person Mahendranath Naganathan    schedule 21.11.2017    source источник


Ответы (1)


Проблема была определена как File.class, указанный в XStream alias() для преобразования. Вместо использования локального com.app.model.File.class используется java.io.File.class, что приводит к тому, что парсер/xstream не преобразует теги, в конечном итоге удаляет его.

person Mahendranath Naganathan    schedule 22.11.2017