#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.