我正在使用 Retrofit 2SimpleXmlConverter
我在创建 Soap 请求对象时遇到一个问题,该对象基本上是一个具有 4 个元素子元素的元素,每个子元素都是不同的数据类型。
这里是XML
我想要产生的输出。必须遵守元素顺序:
<prf:container>
<prf:aaa>111111111</prf:aaa>
<prf:bbb>true</prf:bbb>
<prf:element>
<prf:ddd>50</prf:ddd>
<prf:eee>false</prf:eee>
</prf:element>
<prf:ccc>textcontent</prf:ccc>
</prf:container>
现在,这是我的 Android 类,Container.java
,表示将被序列化的 Soap 请求对象:
@Root (name = "prf:container")
@Order(elements={"prf:aaa", "prf:bbb", "prf:element", "prf:ccc"})
public class Container {
@Element (name = "prf:aaa")
private int aaa;
@Element(name = "prf:bbb")
private boolean bbb;
@Element (name = "prf:element", required = false)
private MyElement myElement;
@Element (name = "prf:ccc", required = false)
private String ccc;
}
根据简单 XML 框架文档:
默认情况下,字段的序列化是按声明顺序完成的。
然而,在 Android 中,情况并非如此,至少在某些情况下是这样。无论我如何设置字段声明顺序Container
类,输出始终具有相同的元素顺序。这是一个已知的错误,正如其他 SO 帖子中所报告的那样。
尽管如此,这个问题还是有解决办法的。这Order
注解。
阅读更多在 Javadoc 中 http://simple.sourceforge.net/download/stream/doc/javadoc/org/simpleframework/xml/Order.html.
我的问题是使用Order
就我而言,注释没有帮助。请注意,我的所有元素的名称都有前缀 -prf:
.
如果我删除prf
我所有元素名称的前缀,Order
注释将正常工作,并强制 XML 序列化具有定义的顺序。但输出元素的名称上不会有前缀。
但我确实需要我的元素在其名称上有前缀,否则我的请求将得到 500 响应。我还必须在 XML 输出中具有所需的元素顺序。
有什么办法解决这个问题吗?
谢谢