Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Как убрать пробелы и перевод строки в XStreам


Автор: isabsent 30.5.2010, 07:37
Нужно передать объект сервлету по Http. Пытаюсь разобраться как это сделать с помощью XStream. Использую метод .toXML. На выходе получаю XML-строку типа
<list>
   <int>0</int>
   <int>1</int>
   <int>2</int>
</list>
-то есть с пробелами и переводами строки. Передать её сервлету через URL не удаётся - ошибка MalformedURL. Нужно избавиться от пробелов и перевода строк. То есть получить строку <list><int>0</int><int>1</int><int>2</int></list> 
Что нужно сказать Xstream'у чтобы оно сериализовал всё в одну строку?

Автор: pathfinder 30.5.2010, 14:16
Код

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.HierarchicalStreamDriver;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XmlFriendlyReplacer;
import com.thoughtworks.xstream.io.xml.XppDriver;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;

public class XStreamTest {

    public static class HSD implements HierarchicalStreamDriver {

        public HSD() {
            this(new XppDriver());
        }

        public HSD(HierarchicalStreamDriver hsd) {
            if (hsd == null) {
                throw new NullPointerException("" +
                        "HierarchicalStreamDriver must be set");
            }
            this.hsd = hsd;
            xmlFriendlyReplacer = new XmlFriendlyReplacer();
        }

        @Override
        public HierarchicalStreamWriter createWriter(Writer out) {
            return new PrettyPrintWriterAdapter(out, xmlFriendlyReplacer);
        }

        @Override
        public HierarchicalStreamWriter createWriter(OutputStream out) {
            return createWriter(new OutputStreamWriter(out));
        }

        @Override
        public HierarchicalStreamReader createReader(Reader reader) {
            return hsd.createReader(reader);
        }

        @Override
        public HierarchicalStreamReader createReader(InputStream in) {
            return hsd.createReader(in);
        }

        /* DATA */
        HierarchicalStreamDriver hsd;
        XmlFriendlyReplacer xmlFriendlyReplacer;

    }

    public static class PrettyPrintWriterAdapter extends PrettyPrintWriter {

        public PrettyPrintWriterAdapter(Writer writer, XmlFriendlyReplacer replacer) {
            super(writer, replacer);
        }

        @Override
        protected void endOfLine() {
            // nothing ...
        }

    }
    
    /* *** Проверяем работу *** */
    public static void main(String[] args) {
        //HSD hsd = new HSD();
        HSD hsd = new HSD(new DomDriver());
        XStream xstream = new XStream(hsd);

        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        
        String xml = xstream.toXML(list);
        System.out.println(xml);
        System.out.println(xstream.fromXML(xml));
    }

}

Автор: isabsent 30.5.2010, 15:59
Спасибо! Жесть какая... Я вижу вы в теме - не проясните один момент? Мне это нужно для передачи параметров через GET. Я думал что одна из целей создания этого пакета (XStream) и была облегчить формирование строки для вставки в HTTP-протокол. Но судя по приведённому вами коду  - это не так... Я в принципе могу обойтись и посредством       
 
 string_1 = xs.toXML(MyArrayList);
 string_2=string_1.replaceAll("\n", "");
 string_3=string_2.replaceAll("\\s", "");

но это как-то топорно выглядит... Кажется что я изобретаю велосипед. Чем положено пользоваться для формирования строки HTTP в Java?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)