Re[8]: хочу невозможного
От: Pavel Dvorkin Россия  
Дата: 12.11.07 06:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, 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)
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.