Сериализатор SimpleXML просто отправляет первую строку

#java #android #xml #servlets #outputstream

#java #Android #xml #сервлеты #outputstream

Вопрос:

У меня проблема при попытке отправить файл xml между Android и сервлетом с POST. Я использую (простой XML) для сериализации.

Мой сервлет выполняет ответ на Android:

 Serializer serial = new Persister();
OutputStream o = response.getOutputStream();

MyXML myXML = new MyXML();
myXML.setMyElement("test");
serial.write(myXML, o);
  

Предполагается, что мой xml будет отправлен непосредственно клиенту следующим образом,

 <MyXML>
  <MyElement>test</MyElement>
</MyXML> 
  

Но он отправляет только первую строку. Затем на стороне Android получает это исключение, потому что он не может получить вторую строку с элементом.

 WARN/System.err(490): org.simpleframework.xml.core.ElementException: Element 'MyElement' does not have a match in class java.lang.Class at line -1
  

Я не могу понять, почему он сериализует только первую строку, когда я делаю это с OutputStream, потому что это работает, когда я сохраняю файлы, не отправляя их,

 Serializer serial = new Persister();
File file = new File("MyPath");

MyXML myXML = new MyXML();
myXML.setMyElement("test");
serial.write(myXML, file);
  

Мне нужно сделать это так, а не с байтами, просто чтобы избежать установки длины содержимого ответа.

Большое спасибо,

РЕДАКТИРОВАТЬ: добавление MyXML.class

Существует MyXML.class,

 package part.myApp;

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root(name="MyXML")
public class MyXML{

       @Element(name="MyElement")
       private String a;

       public void setMyElement(String a){
           this.a=a;
       }

       public String getMyElement() {
          return a;           
       }
}
  

Спасибо.

Комментарии:

1. Не могли бы вы, пожалуйста, опубликовать, как выглядит класс myXML в комплекте с аннотациями Simple XML Framework? Я могу помочь, если у меня будет больше информации.

2. Я отредактировал свой пост с MyXML.class

Ответ №1:

Частный доступ на ‘a’ может быть проблемой. Используйте параметры POJO:

 @Root(name="MyXML")
public class MyXML{
       private String a;

       @Element(name="MyElement")
       public void setMyElement(String a){
           this.a=a;
       }

       @Element(name="MyElement")
       public String getMyElement() {
          return a;           
       }
}
  

Дайте мне знать, работает ли это для вас.

Комментарии:

1. Все еще не работает. Я не знаю, почему ответ сервлета просто отправляет обратно первый тег <myXML> . Я протестировал данные, полученные на стороне клиента, и это просто тег, ничего больше. Я использую Simple 2.4.1, потому что я работаю с Android, и в версии 2.5 есть ошибка.

2. Я сам использую версию 2.5.3 в одном из своих проектов. Что не так с версией 2.5? И вы все еще получаете то же сообщение об ошибке?

3. Я получаю точно такую же ошибку. Если я использую версию 2.5, я получаю другую ошибку: ERROR /AndroidRuntime(1287): java.lang. Ошибка проверки: org.simpleframework.xml.core. StructureBuilder.

4. Я использовал в части своего проекта, где я работаю без Android, и я получаю ту же ошибку с версией 2.5.3.