Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>В общем, суть задачи предельно проста. Есть XML, заведомо валидный, проверка не требуется. Есть XSD, описывающий его схему, тоже валидный. Необходимо из XML создать экземпляр класса Java и обратно. И как можно быстрее.
А>Тебе ссылку http://javolution.org/api/javolution/xml/package-summary.html#package_description я зачем давал? Ты даже не удосужился попробовать.
А ты сам ее пробовал ? Если да, объясни, что я не так делаю.
По ссылке есть пример. В примере используются классы, которые не описаны, так что я его непосредственно пропустить не мог. Сделал по образцу простенький тест
package test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import javolution.xml.XMLBinding;
import javolution.xml.XMLFormat;
import javolution.xml.XMLObjectReader;
import javolution.xml.XMLObjectWriter;
import javolution.xml.XMLSerializable;
import javolution.xml.stream.XMLStreamException;
public class Graphic implements XMLSerializable {
static final long serialVersionUID = 1;
private String str;
public Graphic() {
str = "test";
}
// Default XML format with name associations (members identified by an unique name).
// See XMLFormat for examples of positional associations.
protected static final XMLFormat<Graphic> XML = new XMLFormat<Graphic>(Graphic.class) {
public void write(Graphic g, OutputElement xml) throws XMLStreamException {
xml.add(g.str, "str", String.class);
}
public void read(InputElement xml, Graphic g) throws XMLStreamException {
g.str = xml.get("str");
}
};
public static void main(String[] args) {
XMLBinding binding = new XMLBinding();
binding.setAlias(Graphic.class, "Graphic");
binding.setClassAttribute("type"); // Use "type" instead of "class" for class attribute.
// Writes the area to a file.
try {
Graphic g = new Graphic();
XMLObjectWriter writer = XMLObjectWriter.newInstance(new FileOutputStream("C:/area.xml"));
writer.setBinding(binding); // Optional.
writer.setIndentation("\t"); // Optional (use tabulation for indentation).
writer.write(g, "Graphic", Graphic.class);
writer.close();
// Reads the area back
XMLObjectReader reader = XMLObjectReader.newInstance(new FileInputStream("C:/area.xml"));
reader.setBinding(binding);
Graphic g1 = reader.read("Graphic", Graphic.class);
System.out.println(g1.str);
reader.close();
}
catch (XMLStreamException e) {
e.printStackTrace();
}
catch (FileNotFoundException e) {}
}
}
Писать — пишет, при чтении выдает
javolution.xml.stream.XMLStreamException: Cannot retrieve class (class attribute not found)
at javolution.xml.XMLBinding.readClassAttribute(Unknown Source)
at javolution.xml.XMLFormat$InputElement.get(Unknown Source)
at test.Graphic$1.read(Graphic.java:28)
at test.Graphic$1.read(Graphic.java:1)
at javolution.xml.XMLFormat$InputElement.get(Unknown Source)
at javolution.xml.XMLFormat$InputElement.get(Unknown Source)
at javolution.xml.XMLObjectReader.read(Unknown Source)
at test.Graphic.main(Graphic.java:48)