序列化器 SimpleXML 仅发送第一行

发布于 11-10 11:46 字数 1487 浏览 3 评论 0原文

我在尝试使用 POST 在 Android 和 servlet 之间发送文件 xml 时遇到问题。我正在使用 (Simple XML) 进行序列化。

我的 servlet 对 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 端会出现此异常,因为它无法获取带有 Element 的第二行。

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;           
       }
}

谢谢。

I have a problem trying to send a file xml between Android and a servlet with POST. I'm using (Simple XML) for the serializing.

My servlet do the response to Android:

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

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

It's supposed to send my xml directly to the client like this,

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

But it only sends the first line . Then, on the Android side gets this exception because it can't get the second line with the Element.

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

I can't understand why it only serialize the first line when i'm doing it with OutputStream because it works when i'm saving on files without sending it,

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

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

I need to do it like that and not with bytes, just to avoid to set the response content length.

Many thanks,

EDIT: Adding MyXML.class

There is 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;           
       }
}

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

轮廓§2024-11-17 11:46:34

“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;           
       }
}

让我知道这是否有效为你。

Private access on 'a' might be a problem. Use the POJO options:

@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;           
       }
}

Let me know if that works for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文